From 2d07a8ce645dce865a2728c91b03dfa57c71ced6 Mon Sep 17 00:00:00 2001 From: gaorl Date: Tue, 23 May 2023 14:10:31 +0800 Subject: [PATCH 01/94] =?UTF-8?q?feature=EF=BC=9A=E5=AE=9A=E5=88=B6?= =?UTF-8?q?=E5=8C=96ftp=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dxhy-core/pom.xml | 2 +- dxhy-customs/pom.xml | 2 +- dxhy-erp/pom.xml | 2 +- dxhy-oss/README | 1 + dxhy-oss/pom.xml | 132 +++++++ .../java/com/dxhy/oss/config/OssConfig.java | 154 ++++++++ .../com/dxhy/oss/config/OssReturnConfig.java | 23 ++ .../java/com/dxhy/oss/model/FileModel.java | 19 + .../com/dxhy/oss/service/AliOssService.java | 41 ++ .../com/dxhy/oss/service/FileService.java | 72 ++++ .../java/com/dxhy/oss/service/FtpService.java | 353 ++++++++++++++++++ .../com/dxhy/oss/service/JdOssService.java | 46 +++ .../oss/service/impl/AliOssServiceImpl.java | 186 +++++++++ .../oss/service/impl/FileServiceImpl.java | 195 ++++++++++ .../oss/service/impl/JdOssServiceImpl.java | 213 +++++++++++ .../oss/service/impl/OssClientFactory.java | 55 +++ .../com/dxhy/oss/utils/FileTypeUtils.java | 60 +++ .../java/com/dxhy/oss/utils/SftpConfig.java | 31 ++ .../java/com/dxhy/oss/utils/SftpFactory.java | 96 +++++ .../java/com/dxhy/oss/utils/SftpPool.java | 41 ++ .../com/dxhy/oss/utils/SftpPoolException.java | 15 + .../com/dxhy/oss/utils/SftpProperties.java | 61 +++ .../java/com/dxhy/DxhyOssApplication.java | 13 + .../src/test/java/com/dxhy/OfdHandle.java | 40 ++ dxhy-oss/src/test/java/com/dxhy/OssTest.java | 127 +++++++ .../java/com/dxhy/SpringContextUtils.java | 43 +++ dxhy-oss/src/test/resources/application.yml | 48 +++ dxhy-portrait/pom.xml | 2 +- dxhy-sign/pom.xml | 2 +- pom.xml | 1 + 30 files changed, 2071 insertions(+), 5 deletions(-) create mode 100644 dxhy-oss/README create mode 100644 dxhy-oss/pom.xml create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/config/OssConfig.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/model/FileModel.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/service/AliOssService.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/service/FileService.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/service/JdOssService.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/service/impl/AliOssServiceImpl.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/service/impl/JdOssServiceImpl.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/service/impl/OssClientFactory.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/utils/FileTypeUtils.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpFactory.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPool.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPoolException.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java create mode 100644 dxhy-oss/src/test/java/com/dxhy/DxhyOssApplication.java create mode 100644 dxhy-oss/src/test/java/com/dxhy/OfdHandle.java create mode 100644 dxhy-oss/src/test/java/com/dxhy/OssTest.java create mode 100644 dxhy-oss/src/test/java/com/dxhy/SpringContextUtils.java create mode 100644 dxhy-oss/src/test/resources/application.yml diff --git a/dxhy-core/pom.xml b/dxhy-core/pom.xml index 53abe822..45cd4923 100644 --- a/dxhy-core/pom.xml +++ b/dxhy-core/pom.xml @@ -150,7 +150,7 @@ com.dxhy.jxpt dxhy-oss - 3.2.9 + 3.3.3 diff --git a/dxhy-customs/pom.xml b/dxhy-customs/pom.xml index bf6ef95a..400bed9a 100644 --- a/dxhy-customs/pom.xml +++ b/dxhy-customs/pom.xml @@ -111,7 +111,7 @@ com.dxhy.jxpt dxhy-oss - 3.2.9 + 3.3.3 com.alibaba.cloud diff --git a/dxhy-erp/pom.xml b/dxhy-erp/pom.xml index 550b4269..1341d782 100644 --- a/dxhy-erp/pom.xml +++ b/dxhy-erp/pom.xml @@ -107,7 +107,7 @@ com.dxhy.jxpt dxhy-oss - 3.2.9 + 3.3.3 com.twelvemonkeys.imageio diff --git a/dxhy-oss/README b/dxhy-oss/README new file mode 100644 index 00000000..e845566c --- /dev/null +++ b/dxhy-oss/README @@ -0,0 +1 @@ +README diff --git a/dxhy-oss/pom.xml b/dxhy-oss/pom.xml new file mode 100644 index 00000000..8d99d8d3 --- /dev/null +++ b/dxhy-oss/pom.xml @@ -0,0 +1,132 @@ + + + + com.dxhy + ofd + 3.2.1 + + 4.0.0 + + + com.dxhy.jxpt + dxhy-oss + 3.3.3 + jar + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + + + + org.projectlombok + lombok + + + cn.hutool + hutool-all + ${hutool.version} + + + com.alibaba + fastjson + ${fastjson.version} + + + + com.aliyun.oss + aliyun-sdk-oss + 3.13.2 + + + com.jcraft + jsch + 0.1.55 + + + com.amazonaws + aws-java-sdk-s3 + 1.12.131 + + + + + + commons-net + commons-net + 3.6 + + + + org.apache.commons + commons-pool2 + 2.7.0 + + + + + io.minio + minio + 8.3.9 + + + org.apache.commons + commons-lang3 + + + + + + + + releases + releases + http://10.1.20.6:8081/nexus/content/repositories/releases/ + + + + snapshots + snapshots + http://10.1.20.6:8081/nexus/content/repositories/snapshots/ + + + + + + true + + 大象慧云 + Public Repositories + http://10.1.20.6:8081/nexus/content/groups/public/ + + + alimaven + aliyun maven + http://maven.aliyun.com/nexus/content/groups/public/ + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${java.version} + ${java.version} + UTF-8 + true + + + + + diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/config/OssConfig.java b/dxhy-oss/src/main/java/com/dxhy/oss/config/OssConfig.java new file mode 100644 index 00000000..c38d490e --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/config/OssConfig.java @@ -0,0 +1,154 @@ +package com.dxhy.oss.config; + +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.jcraft.jsch.ChannelSftp; + +import lombok.Data; + +/** + * @author jiaohongyang + */ +@Component +@Data +public class OssConfig { + + /** + * oss 服务类型 JD AL FTP + */ + @Value("${oss.ossType:FTP}") + public String ossType; + /** + * 阿里请求地址 + */ + @Value("${oss.endpointUrl:}") + public String endpointUrl; + /** + * 访问密钥 + */ + @Value("${oss.accessKeyId:}") + public String accessKeyId; + /** + * 访问密钥 + */ + @Value("${oss.accessKeySecret:}") + public String accessKeySecret; + + /** + * 京东云地域 + */ + @Value("${oss.region:}") + public String region; + /** + * 实例 + */ + @Value("${oss.bucketName:}") + public String bucketName; + + /** + * ftp上传的根路径 + */ + @Value("${ftp.connection.pathPrefix:}") + public String pathPrefix; + + /** + * ftp服务器地址 + */ + @Value("${ftp.connection.hostname:}") + public String hostname; + + /** + * ftp服务器端口 + */ + @Value("${ftp.connection.port:62236}") + public String port; + + /** + * ftp登录密码 + */ + @Value("${ftp.connection.password:}") + public String password; + + @Value("${ftp.connection.timeout:6000}") + public String timeout; + /** + * ftp登录账号 + */ + @Value("${ftp.connection.username:}") + public String username; + + @Value("${ftp.connection.localPathDefault:}") + public String localPathDefault; + + /** + * 临时路径 + */ + @Value("${ftp.connection.tempPath:}") + public String tempPath; + + /** + * ftp配置信息 + */ + @Value("${ftp.connection.size:2}") + public String pdfSize; + + /** + * 图片的最大大小 + */ + @Value("${oss.imageSize:10485760}") + public long imageSize; + + /** + * 其他文件的最大大小 + */ + @Value("${oss.fileSize:1073741824}") + public long fileSize; + + private Pool pool = new Pool(); + + public static class Pool extends GenericObjectPoolConfig { + + private int maxTotal = DEFAULT_MAX_TOTAL; + + private int maxIdle = DEFAULT_MAX_IDLE; + + private int minIdle = DEFAULT_MIN_IDLE; + + public Pool() { + super(); + } + + @Override + public int getMaxTotal() { + return maxTotal; + } + + @Override + public void setMaxTotal(int maxTotal) { + this.maxTotal = maxTotal; + } + + @Override + public int getMaxIdle() { + return maxIdle; + } + + @Override + public void setMaxIdle(int maxIdle) { + this.maxIdle = maxIdle; + } + + @Override + public int getMinIdle() { + return minIdle; + } + + @Override + public void setMinIdle(int minIdle) { + this.minIdle = minIdle; + } + + } +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java b/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java new file mode 100644 index 00000000..2ca3c1d5 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java @@ -0,0 +1,23 @@ +package com.dxhy.oss.config; + +/** + * @author jiaohongyang(焦红阳) + * @date 2020-09-30 + */ +public interface OssReturnConfig { + String SUCCESS = "000000"; + + String ERROR_01 = "000001"; + + String ERROR_09 = "999999"; + + String JD = "JD"; + + String AL = "AL"; + + String FTP = "FTP"; + + String TOS = "TOS"; + + String MINIO = "MINIO"; +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/model/FileModel.java b/dxhy-oss/src/main/java/com/dxhy/oss/model/FileModel.java new file mode 100644 index 00000000..196e1b07 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/model/FileModel.java @@ -0,0 +1,19 @@ +package com.dxhy.oss.model; + +import lombok.Data; + +/** + * @author jiaohongyang(焦红阳) + * @date 2020-10-17 + */ +@Data +public class FileModel { + /** + * 编码 + */ + private String code; + /** + * 文件地址 + */ + private String filePath; +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/AliOssService.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/AliOssService.java new file mode 100644 index 00000000..801c4adc --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/AliOssService.java @@ -0,0 +1,41 @@ +package com.dxhy.oss.service; + +import com.dxhy.oss.model.FileModel; + +/** + * @author jiaohongyang + */ +public interface AliOssService { + /** + * 阿里云OSS文件存储 + * + * @param file 文件 + * @return 返回 + */ + FileModel uploadFile(String fileName, String file); + + /** + * 下载 + * + * @param fileName 文件名称 + * @param filePath 本地文件存储地址 + * @return 返回 + */ + FileModel downloadFile(String fileName, String filePath); + + /** + * 删除文件 + * + * @param file 文件名 + * @return 返回 + */ + FileModel deleteFile(String file); + + /** + * 生产文件下载地址 + * + * @param key 文件传输路径加名称 + * @return 返回下载地址 + */ + FileModel getUrl(String key); +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/FileService.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/FileService.java new file mode 100644 index 00000000..0514e03f --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/FileService.java @@ -0,0 +1,72 @@ +package com.dxhy.oss.service; + +import com.dxhy.oss.model.FileModel; + +/** + * @author jiaohongyang + */ +public interface FileService { + /** + * 文件上传 + * + * @param fileName 文件 ftp名称 + * @param originFileName 本地文件地址 + * @return 返回 + * @throws Exception 异常 + */ + FileModel uploadFile(String fileName, String originFileName) throws Exception; + + /** + * 文件下载 + * + * @param downloadFile 下载文件 + * @param saveFile 保存文件地址 + * @return 返回 + * @throws Exception 异常 + */ + + FileModel downFile(String downloadFile, String saveFile) throws Exception; + + + /** + * 生成文件下载地址 + * + * @param key 文件传输路径加名称 + * @return 返回文件下载地址 + */ + FileModel getUrl(String key); + + /** + * 删除文件 + * + * @param file 文件地址 + * @return 返回 + */ + FileModel deleteFile(String file); + + + /** + * 获取ftp 上传地址 + * + * @return 返回 + */ + String getPathPrefix(); + + /** + * 图片本地地址 + * + * @return 返回 + */ + String getLocalPathDefault(); + + /** + * 临时路径 + */ + String getTempPath(); + + /** + * PDF 上传文件大小 + */ + String getFtpPdfSize(); + +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java new file mode 100644 index 00000000..c82fe0fb --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java @@ -0,0 +1,353 @@ +package com.dxhy.oss.service; + +import cn.hutool.core.io.FileUtil; +import com.dxhy.oss.utils.SftpPool; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.SftpException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.net.ftp.FTP; +import org.apache.commons.net.ftp.FTPClient; +import org.apache.commons.net.ftp.FTPFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; + +/** + * @author jiaohongyang + */ +@Slf4j +public class FtpService { + + private final SftpPool pool; + + public FtpService(SftpPool pool) { + this.pool = pool; + } + + /** + * 将输入流的数据上传到sftp作为文件。文件完整路径 = basePath+directory + * + * @param pathName ftp服务保存地址,完整路径 + * @param fileName 上传到ftp的文件名 + * @param originFileName 待上传文件的名称(绝对地址) + */ + + public boolean uploadFile(String pathName, String fileName, String originFileName) throws InterruptedException { + log.info("开始上传文件"); + ChannelSftp sftp = null; + InputStream inputStream; + try { + sftp = pool.borrowObject(); + try { + sftp.cd(pathName); + } catch (SftpException e) { + // 目录不存在,则创建文件夹 + String[] dirs = pathName.split("/"); + String tempPath = ""; + for (String dir : dirs) { + if (null == dir || "".equals(dir)) { + continue; + } + tempPath += "/" + dir; + try { + sftp.cd(tempPath); + } catch (SftpException ex) { + try { + sftp.mkdir(tempPath); + sftp.cd(tempPath); + } catch (SftpException e1) { + e1.printStackTrace(); + } + } + } + } + + File orgFile = new File(originFileName); + inputStream = Files.newInputStream(orgFile.toPath()); + sftp.put(inputStream, fileName); + inputStream.close(); + // 删除本地文件,防止服务器空间不足 + FileUtil.del(orgFile); + log.info("上传文件成功"); + return true; + } catch (Exception e) { + e.printStackTrace(); + log.info("上传文件失败"); + return false; + } finally { + if (sftp != null) { + log.info("回收线程"); + pool.returnObject(sftp); + } + + } + } + + public static boolean uploadFile(FTPClient ftpClient, String serviceDec, String fileName, InputStream inputStream) { + try { + log.info("开始上传文件"); + ftpClient.setFileType(FTP.BINARY_FILE_TYPE); + createDirecroty(ftpClient, serviceDec); + ftpClient.makeDirectory(serviceDec); + ftpClient.changeWorkingDirectory(serviceDec); + ftpClient.storeFile(fileName, inputStream); + inputStream.close(); + ftpClient.logout(); + log.info("上传文件成功"); + } catch (Exception e) { + log.error("上传文件失败" + e); + } finally { + try { + if (ftpClient.isConnected()) { + ftpClient.disconnect(); + } + if (null != inputStream) { + inputStream.close(); + } + } catch (IOException e) { + log.error("上传文件失败" + e); + return false; + } + } + return true; + } + + private static boolean createDirecroty(FTPClient ftpClient, String remote) throws IOException { + boolean success = true; + String directory = remote + "/"; + // 如果远程目录不存在,则递归创建远程服务器目录 + if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(ftpClient, new String(directory))) { + int start = 0; + int end = 0; + if (directory.startsWith("/")) { + start = 1; + } else { + start = 0; + } + end = directory.indexOf("/", start); + String path = ""; + String paths = ""; + while (true) { + String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1"); + path = path + "/" + subDirectory; + if (!existFile(ftpClient, path)) { + if (makeDirectory(ftpClient, subDirectory)) { + changeWorkingDirectory(ftpClient, subDirectory); + } else { + log.info("创建目录[" + subDirectory + "]失败"); + changeWorkingDirectory(ftpClient, subDirectory); + } + } else { + changeWorkingDirectory(ftpClient, subDirectory); + } + + paths = paths + "/" + subDirectory; + start = end + 1; + end = directory.indexOf("/", start); + // 检查所有目录是否创建完毕 + if (end <= start) { + break; + } + } + } + return success; + } + + //改变目录路径 + private static boolean changeWorkingDirectory(FTPClient ftpClient, String directory) { + boolean flag = true; + try { + flag = ftpClient.changeWorkingDirectory(directory); + if (flag) { + log.info("进入文件夹" + directory + " 成功!"); + + } else { + log.info("进入文件夹" + directory + " 失败!开始创建文件夹"); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return flag; + } + + //判断ftp服务器文件是否存在 + private static boolean existFile(FTPClient ftpClient, String path) throws IOException { + boolean flag = false; + FTPFile[] ftpFileArr = ftpClient.listFiles(path); + if (ftpFileArr.length > 0) { + flag = true; + } + return flag; + } + + //创建目录 + private static boolean makeDirectory(FTPClient ftpClient, String dir) { + boolean flag = true; + try { + flag = ftpClient.makeDirectory(dir); + if (flag) { + log.info("创建文件夹" + dir + " 成功!"); + + } else { + log.info("创建文件夹" + dir + " 失败!"); + } + } catch (Exception e) { + e.printStackTrace(); + } + return flag; + } + + /** + * 获取FTP某一特定目录下的所有文件名称 + * + * @param ftpClient 已经登陆成功的FTPClient + * @param ftpDirPath FTP上的目标文件路径 + */ + public static List getFileNameList(FTPClient ftpClient, String ftpDirPath) { + List list = new ArrayList(); + try { + if (ftpDirPath.startsWith("/") && ftpDirPath.endsWith("/")) { + // 通过提供的文件路径获取FTPFile对象列表 + FTPFile[] files = ftpClient.listFiles(ftpDirPath); + // 遍历文件列表,打印出文件名称 + for (int i = 0; i < files.length; i++) { + FTPFile ftpFile = files[i]; + // 此处只打印文件,未遍历子目录(如果需要遍历,加上递归逻辑即可) + if (ftpFile.isFile()) { +// log.info(ftpDirPath + ftpFile.getName()); + list.add(ftpFile.getName()); + } + } + log.info("当前FTP路径可用"); + } else { + log.info("当前FTP路径不可用"); + } + } catch (IOException e) { + log.error("错误" + e); + } + return list; + } + public File downloadFile(FTPClient ftpClient, String servicePath, String fileName, String localFilePath) { + String name = dowFile(ftpClient, servicePath, fileName, localFilePath); + if (name != null && !name.equals("")){ + return new File(fileName); + } + return null; + } + + private static String dowFile(FTPClient ftpClient, String servicePath, String fileName, String localFilePath) { + InputStream is = null; + FileOutputStream fos = null; + try { + ftpClient.enterLocalPassiveMode(); + is = ftpClient.retrieveFileStream(servicePath + fileName);// 获取ftp上的文件 + fos = new FileOutputStream(new File(localFilePath + fileName)); + // 文件读取方式一 + int i; + byte[] bytes = new byte[1024]; + while ((i = is.read(bytes)) != -1) { + fos.write(bytes, 0, i); + } + // 文件读取方式二 + //ftpClient.retrieveFile(ftpFilePath, new FileOutputStream(new File(localFilePath))); + ftpClient.completePendingCommand(); + log.info("FTP文件下载成功!"); + } catch (Exception e) { + log.error("FTP文件下载失败!" + e); + } finally { + try { + if (fos != null) fos.close(); + if (is != null) is.close(); + } catch (IOException e) { + log.error("下载流关闭失败" + e); + return null; + } + } + return localFilePath + fileName; + } + + public boolean downloadFile(String directory, String downloadFile, String saveFile) { + log.info("开始下载文件!"); + ChannelSftp sftp = null; + try { + sftp = pool.borrowObject(); + if (directory != null && !"".equals(directory)) { + sftp.cd(directory); + } + String file = saveFile + "/" + downloadFile; + File fileLocal = new File(file); + if (fileLocal.exists()) { + boolean delete = fileLocal.delete(); + log.info("删除本地路径文件:{}", delete); + } + this.directoryIsExists(saveFile); + sftp.get(downloadFile, file); + log.info("下载文件成功!"); + return true; + } catch (Exception e) { + e.printStackTrace(); + log.info("下载文件失败!"); + return false; + } finally { + if (sftp != null) { + log.info("回收线程"); + pool.returnObject(sftp); + } + + } + + + } + + + /** + * 删除文件 + * + * @param directory 要删除文件所在目录 + * @param deleteFile 要删除的文件 + * @return 返回是否删除成功 + */ + + public boolean deleteFile(String directory, String deleteFile) { + ChannelSftp sftp = null; + try { + sftp = pool.borrowObject(); + sftp.cd(directory); + sftp.rm(deleteFile); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + if (sftp != null) { + log.info("回收线程"); + pool.returnObject(sftp); + } + } + } + + + public void directoryIsExists(String path) { + File directory = new File(path); + if (directory.exists()) { + return; + } + + if (!directory.mkdir()) { + return; + } + + if (directory.canWrite()) { + return; + } + + boolean setWritable = directory.setWritable(true); + log.info("是否创建文件 directoryIsExists :{} ", setWritable); + + } +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/JdOssService.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/JdOssService.java new file mode 100644 index 00000000..d6a8d2d1 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/JdOssService.java @@ -0,0 +1,46 @@ +package com.dxhy.oss.service; + +import com.dxhy.oss.model.FileModel; + +/** + * @author jiaohongyang + */ +public interface JdOssService { + /** + * 阿里云OSS文件存储 + * + * @param file + * 文件 + * @return 返回 + */ + FileModel uploadFile(String fileName, String file); + + /** + * 下载 + * + * @param fileName + * 文件名称 + * @param filePath + * 本地文件存储地址 + * @return 返回 + */ + FileModel downloadFile(String fileName, String filePath); + + /** + * 生成文件下载地址 + * + * @param key + * 文件传输路径加名称 + * @return 返回文件下载地址 + */ + FileModel getUrl(String key); + + /** + * 删除文件 + * + * @param file + * 文件信息 + * @return 返回 + */ + FileModel deleteFile(String file); +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/AliOssServiceImpl.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/AliOssServiceImpl.java new file mode 100644 index 00000000..b5c6a21f --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/AliOssServiceImpl.java @@ -0,0 +1,186 @@ +package com.dxhy.oss.service.impl; + +import cn.hutool.core.io.FileUtil; +import com.aliyun.oss.OSS; +import com.aliyun.oss.model.GetObjectRequest; +import com.dxhy.oss.config.OssConfig; +import com.dxhy.oss.config.OssReturnConfig; +import com.dxhy.oss.model.FileModel; +import com.dxhy.oss.service.AliOssService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.net.URL; +import java.util.Date; + +/** + * @author jiaohongyang + */ +@Service("aliOssService") +@Slf4j +public class AliOssServiceImpl implements AliOssService { + + private final OssConfig ossConfig; + + @Autowired + public AliOssServiceImpl(OssConfig ossConfig) { + this.ossConfig = ossConfig; + } + + /** + * 阿里云OSS文件存储 + * + * @param filePath 文件 + * @return 返回 + */ + @Override + public FileModel uploadFile(String fileName, String filePath) { + OSS ossClient = null; + FileModel fileModel; + + log.info("文件存储阿里OSS,存储目录:{} , 存储文件名:{} ", ossConfig.getBucketName(), fileName); + try { + // 创建连接 + ossClient = + OssClientFactory.getInstance(ossConfig.getEndpointUrl(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); + if (ossClient == null) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } + + // 进行文件上传 + + ossClient.putObject(ossConfig.getBucketName(), fileName, new File(filePath)); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + fileModel.setFilePath(fileName); + return fileModel; + } catch (Exception e) { + log.error("文件存储阿里OSS失败,异常:{}", e.getMessage()); + e.printStackTrace(); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + FileUtil.del(filePath); + } + } + + @Override + public FileModel getUrl(String key) { + OSS ossClient = null; + FileModel fileModel; + try { + ossClient = + OssClientFactory.getInstance(ossConfig.getEndpointUrl(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); + if (ossClient == null) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } + // 设置URL过期时间为10年 3600l* 1000*24*365*10 + Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24); + // 生成URL + URL url = ossClient.generatePresignedUrl(ossConfig.getBucketName(), key, expiration); + if (url != null) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + fileModel.setFilePath(url.toString()); + return fileModel; + } + } catch (Exception e) { + e.printStackTrace(); + + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } + + /** + * 下载 + * + * @param fileName 文件名称 + * @param filePath 本地文件存储地址 + * @return 返回 + */ + @Override + public FileModel downloadFile(String fileName, String filePath) { + log.info("下载文件阿里OSS,存储目录:{} , 存储文件名:{} ", ossConfig.getBucketName(), fileName); + OSS ossClient = null; + FileModel fileModel; + try { + // 创建连接 + ossClient = + OssClientFactory.getInstance(ossConfig.getEndpointUrl(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); + if (ossClient == null) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } + // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。 + ossClient.getObject(new GetObjectRequest(ossConfig.getBucketName(), fileName), new File(filePath)); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + fileModel.setFilePath(filePath); + return fileModel; + } catch (Exception e) { + log.error("文件下载阿里OSS失败,异常:{}", e.getMessage()); + e.printStackTrace(); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + } + + /** + * 删除文件 + * + * @param file 文件名 + * @return 返回 + */ + @Override + public FileModel deleteFile(String file) { + log.info("文件删除阿里OSS,存储目录:{} , 存储文件名:{} ", ossConfig.getBucketName(), file); + OSS ossClient = null; + FileModel fileModel; + try { + // 创建连接 + ossClient = + OssClientFactory.getInstance(ossConfig.getEndpointUrl(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); + if (ossClient == null) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } + ossClient.deleteObject(ossConfig.getBucketName(), file); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + return fileModel; + } catch (Exception e) { + log.error("文件删除阿里OSS失败,异常:{}", e.getMessage()); + e.printStackTrace(); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + } +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java new file mode 100644 index 00000000..ad62dea6 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java @@ -0,0 +1,195 @@ +package com.dxhy.oss.service.impl; + +import cn.hutool.core.io.FileUtil; +import com.dxhy.oss.config.OssConfig; +import com.dxhy.oss.config.OssReturnConfig; +import com.dxhy.oss.model.FileModel; +import com.dxhy.oss.service.AliOssService; +import com.dxhy.oss.service.FileService; +import com.dxhy.oss.service.FtpService; +import com.dxhy.oss.service.JdOssService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.File; + +/** + * @author jiaohongyang + */ +@Slf4j +@Service("fileService") +public class FileServiceImpl implements FileService { + private final OssConfig ossConfig; + private final AliOssService aliOssService; + private final JdOssService jdOssService; + private final FtpService ftpService; + + @Autowired + public FileServiceImpl(OssConfig ossConfig, AliOssService aliOssService, JdOssService jdOssService, FtpService ftpService) { + this.ossConfig = ossConfig; + this.aliOssService = aliOssService; + this.jdOssService = jdOssService; + this.ftpService = ftpService; + } + + /** + * 文件上传 + * + * @param fileName 上传文件,路径+ 名称 + * @param originFileName 本地文件地址 + * @return 返回 + * @throws Exception 异常 + */ + @Override + public FileModel uploadFile(String fileName, String originFileName) throws Exception { + log.info("上传文件地址:{} , 本地存储文件地址:{}", fileName, originFileName); + FileModel fileModel; + if (OssReturnConfig.AL.equals(ossConfig.getOssType())) { + if (fileName.startsWith("/")) { + fileName = fileName.substring(1); + } + fileModel = aliOssService.uploadFile(fileName, originFileName); + + } else if (OssReturnConfig.JD.equals(ossConfig.getOssType())) { + if (fileName.startsWith("/")) { + fileName = fileName.substring(1); + } + fileModel = jdOssService.uploadFile(fileName, originFileName); + + } else if (OssReturnConfig.FTP.equals(ossConfig.getOssType())) { + if (!fileName.startsWith("/")) { + fileName = "/" + fileName; + } + String directory = fileName.substring(0, fileName.lastIndexOf("/")); + File directoryFile = new File(fileName); + String downloadFileName = directoryFile.getName(); + boolean b = ftpService.uploadFile(directory, downloadFileName, originFileName); + fileModel = new FileModel(); + fileModel.setFilePath(fileName); + if (b) { + fileModel.setCode(OssReturnConfig.SUCCESS); + } else { + fileModel.setCode(OssReturnConfig.ERROR_09); + } + + } else { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + } + log.info("文件上传结果编码:{},地址信息返回:{}", fileModel.getCode(), fileModel.getFilePath()); + return fileModel; + } + + @Override + public FileModel downFile(String downloadFile, String saveFile) { + log.info("下载文件地址:{} , 本地存储文件地址:{}", downloadFile, saveFile); + // 获取下载文件存储路径 ,路径不存在则创建路径 + File file = new File(saveFile); + String path = file.getParent(); + FileUtil.mkdir(path); + FileModel fileModel; + if (OssReturnConfig.AL.equals(ossConfig.getOssType())) { + if (downloadFile.startsWith("/")) { + downloadFile = downloadFile.substring(1); + } + fileModel = aliOssService.downloadFile(downloadFile, saveFile); + } else if (OssReturnConfig.JD.equals(ossConfig.getOssType())) { + if (downloadFile.startsWith("/")) { + downloadFile = downloadFile.substring(1); + } + fileModel = jdOssService.downloadFile(downloadFile, saveFile); + } else if (OssReturnConfig.FTP.equals(ossConfig.getOssType())) { + String directory = downloadFile.substring(0, downloadFile.lastIndexOf("/")); + File directoryFile = new File(downloadFile); + String downloadFileName = directoryFile.getName(); + boolean b = ftpService.downloadFile(directory, downloadFileName, path); + fileModel = new FileModel(); + fileModel.setFilePath(saveFile); + if (b) { + fileModel.setCode(OssReturnConfig.SUCCESS); + } else { + fileModel.setCode(OssReturnConfig.ERROR_09); + } + + + } else { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + } + log.info("文件下载结果编码:{},地址信息返回:{}", fileModel.getCode(), fileModel.getFilePath()); + return fileModel; + } + + + @Override + public FileModel getUrl(String key) { + FileModel fileModel; + log.info("生成文件下载地址:{} ", key); + if (OssReturnConfig.AL.equals(ossConfig.getOssType())) { + fileModel = aliOssService.getUrl(key); + } else if (OssReturnConfig.JD.equals(ossConfig.getOssType())) { + fileModel = jdOssService.getUrl(key); + } else { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + } + log.info("生成文件下载地址结果编码:{},地址链接返回:{}", fileModel.getCode(), fileModel.getFilePath()); + return fileModel; + } + + @Override + public FileModel deleteFile(String path) { + log.info("删除文件信息:{} ", path); + FileModel fileModel; + if (OssReturnConfig.AL.equals(ossConfig.getOssType())) { + if (path.startsWith("/")) { + path = path.substring(1); + } + fileModel = aliOssService.deleteFile(path); + } else if (OssReturnConfig.JD.equals(ossConfig.getOssType())) { + if (path.startsWith("/")) { + path = path.substring(1); + } + fileModel = jdOssService.deleteFile(path); + } else if (OssReturnConfig.FTP.equals(ossConfig.getOssType())) { + File file = new File(path); + boolean b = ftpService.deleteFile(file.getParent(), file.getName()); + if (b) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + } else { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_01); + } + } else { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + } + log.info("删除文件信息返回结果编码:{}", fileModel.getCode()); + return fileModel; + } + + @Override + public String getPathPrefix() { + return ossConfig.getPathPrefix(); + } + + @Override + public String getLocalPathDefault() { + return ossConfig.getLocalPathDefault(); + } + + @Override + public String getTempPath() { + return ossConfig.getTempPath(); + } + + /** + * PDF 上传文件大小 + */ + @Override + public String getFtpPdfSize() { + return ossConfig.getPdfSize(); + } +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/JdOssServiceImpl.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/JdOssServiceImpl.java new file mode 100644 index 00000000..349d123f --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/JdOssServiceImpl.java @@ -0,0 +1,213 @@ +package com.dxhy.oss.service.impl; + +import cn.hutool.core.io.FileUtil; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest; +import com.amazonaws.services.s3.model.S3Object; +import com.amazonaws.services.s3.model.S3ObjectInputStream; +import com.dxhy.oss.config.OssConfig; +import com.dxhy.oss.config.OssReturnConfig; +import com.dxhy.oss.model.FileModel; +import com.dxhy.oss.service.JdOssService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.util.Date; + +/** + * @author jiaohongyang + */ +@Service("jdOssService") +@Slf4j +public class JdOssServiceImpl implements JdOssService { + private final OssConfig ossConfig; + + @Autowired + public JdOssServiceImpl(OssConfig ossConfig) { + this.ossConfig = ossConfig; + } + + /** + * 京东云OSS文件存储 + * + * @param filePath 文件 + * @return 返回 + */ + @Override + public FileModel uploadFile(String fileName, String filePath) { + FileModel fileModel; + AmazonS3 jdInstance = null; + + log.info("文件存储京东OSS,存储目录:{} , 存储文件名:{} ", ossConfig.getBucketName(), fileName); + try { + // 创建连接 + jdInstance = OssClientFactory.getJdInstance(ossConfig.getEndpointUrl(), ossConfig.getAccessKeyId(), + ossConfig.getAccessKeySecret(), ossConfig.getRegion()); + if (jdInstance == null) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } + + // 进行文件上传 + jdInstance.putObject(ossConfig.getBucketName(), fileName, new File(filePath)); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + fileModel.setFilePath(fileName); + return fileModel; + } catch (Exception e) { + log.error("文件存储京东OSS失败,异常:{}", e.getMessage()); + e.printStackTrace(); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } finally { + if (jdInstance != null) { + jdInstance.shutdown(); + } + FileUtil.del(filePath); + } + } + + /** + * 下载 + * + * @param fileName 文件名称 + * @param filePath 本地文件存储地址 + * @return 返回 + */ + @Override + public FileModel downloadFile(String fileName, String filePath) { + log.info("下载文件京东OSS,存储目录:{} , 存储文件名:{} ", ossConfig.getBucketName(), fileName); + AmazonS3 jdInstance = null; + S3ObjectInputStream s3is = null; + FileOutputStream fos = null; + FileModel fileModel; + try { + // 创建连接 + jdInstance = OssClientFactory.getJdInstance(ossConfig.getEndpointUrl(), ossConfig.getAccessKeyId(), + ossConfig.getAccessKeySecret(), ossConfig.getRegion()); + if (jdInstance == null) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } + // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。 + S3Object object = jdInstance.getObject(ossConfig.getBucketName(), fileName); + s3is = object.getObjectContent(); + fos = new FileOutputStream(filePath); + byte[] readBuf = new byte[1024]; + int readLen = 0; + while ((readLen = s3is.read(readBuf)) > 0) { + fos.write(readBuf, 0, readLen); + } + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + fileModel.setFilePath(filePath); + return fileModel; + } catch (Exception e) { + e.printStackTrace(); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } finally { + try { + if (s3is != null) { + s3is.close(); + } + if (fos != null) { + fos.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + if (jdInstance != null) { + jdInstance.shutdown(); + } + } + } + + @Override + public FileModel getUrl(String key) { + log.info("生成文件下载地址京东OSS,存储目录:{} , 存储文件名:{} ", ossConfig.getBucketName(), key); + AmazonS3 jdInstance = null; + FileModel fileModel; + try { + // 创建连接 + jdInstance = OssClientFactory.getJdInstance(ossConfig.getEndpointUrl(), ossConfig.getAccessKeyId(), + ossConfig.getAccessKeySecret(), ossConfig.getRegion()); + if (jdInstance == null) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } + // 设置URL过期时间为10年 3600l* 1000*24*365*10 + Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 2); + GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(ossConfig.getBucketName(), key); + request.setExpiration(expiration); + URL url = jdInstance.generatePresignedUrl(request); + if (url != null) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + fileModel.setFilePath(url.toString()); + return fileModel; + } + + } catch (Exception e) { + e.printStackTrace(); + log.error("文件下载京东OSS失败,异常:{}", e.getMessage()); + } finally { + if (jdInstance != null) { + jdInstance.shutdown(); + } + } + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + + } + + /** + * 删除文件 + * + * @param file 文件名 + * @return 返回 + */ + @Override + public FileModel deleteFile(String file) { + log.info("文件删除京东云OSS,存储目录:{} , 存储文件名:{} ", ossConfig.getBucketName(), file); + AmazonS3 jdInstance = null; + FileModel fileModel; + try { + // 创建连接 + // 创建连接 + jdInstance = OssClientFactory.getJdInstance(ossConfig.getEndpointUrl(), ossConfig.getAccessKeyId(), + ossConfig.getAccessKeySecret(), ossConfig.getRegion()); + if (jdInstance == null) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } + jdInstance.deleteObject(ossConfig.getBucketName(), file); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + return fileModel; + } catch (Exception e) { + log.error("文件删除京东云OSS失败,异常:{}", e.getMessage()); + e.printStackTrace(); + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_09); + return fileModel; + } finally { + if (jdInstance != null) { + jdInstance.shutdown(); + } + } + } +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/OssClientFactory.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/OssClientFactory.java new file mode 100644 index 00000000..333d6d99 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/OssClientFactory.java @@ -0,0 +1,55 @@ +package com.dxhy.oss.service.impl; + +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.amazonaws.ClientConfiguration; +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSCredentialsProvider; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3Client; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Scope; + +/** + * @author jiaohongyang + */ +@Slf4j +public class OssClientFactory { + + private OssClientFactory() { + } + + /** + * 创建连接 + */ + @Bean + @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static OSS getInstance(String endpointUrl, String accessKeyId, String accessKeySecret) { + return new OSSClientBuilder().build(endpointUrl, accessKeyId, accessKeySecret); + } + + + @Bean + @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public static AmazonS3 getJdInstance(String endpointUrl, String accessKeyId, String accessKeySecret, + String region) { + ClientConfiguration config = new ClientConfiguration(); + + AwsClientBuilder.EndpointConfiguration endpointConfig = + new AwsClientBuilder.EndpointConfiguration(endpointUrl, region); + + AWSCredentials awsCredentials = new BasicAWSCredentials(accessKeyId, accessKeySecret); + AWSCredentialsProvider awsCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials); + + return AmazonS3Client.builder().withEndpointConfiguration(endpointConfig).withClientConfiguration(config) + .withCredentials(awsCredentialsProvider).disableChunkedEncoding().withPathStyleAccessEnabled(true) + .build(); + } + + +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/FileTypeUtils.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/FileTypeUtils.java new file mode 100644 index 00000000..593c5ae8 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/FileTypeUtils.java @@ -0,0 +1,60 @@ +package com.dxhy.oss.utils; + +import cn.hutool.core.io.FileTypeUtil; + +import java.io.InputStream; + +/** + * 文件类型工具类 + * TODO 其中只是定义了部分文件格式,有缺失的自己添加 + */ +public class FileTypeUtils { + + private final static String IMAGE_TYPE = "image/"; + private final static String AUDIO_TYPE = "audio/"; + private final static String VIDEO_TYPE = "video/"; + private final static String APPLICATION_TYPE = "application/"; + private final static String TXT_TYPE = "text/"; + + public static String getFileType(InputStream fileInputStream) { + String type = null; + try { + + type = FileTypeUtil.getType(fileInputStream); + if (type.equalsIgnoreCase("JPG") || type.equalsIgnoreCase("JPEG") + || type.equalsIgnoreCase("GIF") || type.equalsIgnoreCase("PNG") + || type.equalsIgnoreCase("BMP") || type.equalsIgnoreCase("PCX") + || type.equalsIgnoreCase("TGA") || type.equalsIgnoreCase("PSD") + || type.equalsIgnoreCase("TIFF")) { + return IMAGE_TYPE + type; + } + if (type.equalsIgnoreCase("mp3") || type.equalsIgnoreCase("OGG") + || type.equalsIgnoreCase("WAV") || type.equalsIgnoreCase("REAL") + || type.equalsIgnoreCase("APE") || type.equalsIgnoreCase("MODULE") + || type.equalsIgnoreCase("MIDI") || type.equalsIgnoreCase("VQF") + || type.equalsIgnoreCase("CD")) { + return AUDIO_TYPE + type; + } + if (type.equalsIgnoreCase("mp4") || type.equalsIgnoreCase("avi") + || type.equalsIgnoreCase("MPEG-1") || type.equalsIgnoreCase("RM") + || type.equalsIgnoreCase("ASF") || type.equalsIgnoreCase("WMV") + || type.equalsIgnoreCase("qlv") || type.equalsIgnoreCase("MPEG-2") + || type.equalsIgnoreCase("MPEG4") || type.equalsIgnoreCase("mov") + || type.equalsIgnoreCase("3gp")) { + return VIDEO_TYPE + type; + } + if (type.equalsIgnoreCase("doc") || type.equalsIgnoreCase("docx") + || type.equalsIgnoreCase("ppt") || type.equalsIgnoreCase("pptx") + || type.equalsIgnoreCase("xls") || type.equalsIgnoreCase("xlsx") + || type.equalsIgnoreCase("zip") || type.equalsIgnoreCase("jar")) { + return APPLICATION_TYPE + type; + } + if (type.equalsIgnoreCase("txt")) { + return TXT_TYPE + type; + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} \ No newline at end of file diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java new file mode 100644 index 00000000..9dba4130 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java @@ -0,0 +1,31 @@ +package com.dxhy.oss.utils; + +import com.dxhy.oss.service.FtpService; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +// ftp配置 +@Configuration +@EnableConfigurationProperties(SftpProperties.class) +public class SftpConfig { + + // 工厂 + @Bean + public SftpFactory sftpFactory(SftpProperties properties) { + return new SftpFactory(properties); + } + + // 连接池 + @Bean + public SftpPool sftpPool(SftpFactory sftpFactory) { + return new SftpPool(sftpFactory); + } + + // 辅助类 + @Bean + public FtpService ftpService(SftpPool sftpPool) { + return new FtpService(sftpPool); + } + +} \ No newline at end of file diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpFactory.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpFactory.java new file mode 100644 index 00000000..8695b5d6 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpFactory.java @@ -0,0 +1,96 @@ +package com.dxhy.oss.utils; + +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.net.ftp.FTPClient; +import org.apache.commons.net.ftp.FTPReply; +import org.apache.commons.pool2.BasePooledObjectFactory; +import org.apache.commons.pool2.PooledObject; +import org.apache.commons.pool2.impl.DefaultPooledObject; + +import java.util.Properties; + +@EqualsAndHashCode(callSuper = true) +@Data +@Slf4j +public class SftpFactory extends BasePooledObjectFactory { + + private SftpProperties ossConfig; + + public SftpFactory(SftpProperties ossConfig) { + this.ossConfig = ossConfig; + } + + @Override + public ChannelSftp create() throws SftpPoolException { + try { + JSch jsch = new JSch(); + Session session = jsch.getSession(ossConfig.getUsername(), ossConfig.getHostname(), Integer.parseInt(ossConfig.getPort())); + // 设置密码 + if (ossConfig.getPassword() != null) { + session.setPassword(ossConfig.getPassword()); + } + // 设置密码 + if (ossConfig.getPassword() != null) { + session.setPassword(ossConfig.getPassword()); + } + // 为Session对象设置properties + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + session.setConfig(config); + // 设置超时时间 + session.setTimeout(Integer.parseInt(ossConfig.getTimeout())); + // 建立链接 + session.connect(); + // 打开SFTP通道 + ChannelSftp channel = (ChannelSftp) session.openChannel("sftp"); + // 建立SFTP通道的连接 + channel.connect(); + return channel; + } catch (JSchException e) { + throw new SftpPoolException("获取ftp连接失败", e); + } + } + + public FTPClient createFtp() throws SftpPoolException{ + FTPClient ftpClient = null; + try { + ftpClient = new FTPClient(); + ftpClient.setControlEncoding("UTF-8");// 中文支持 + ftpClient.setConnectTimeout(1000 * 30);//设置连接超时时间 + ftpClient.connect(ossConfig.getHostname(), Integer.valueOf(ossConfig.getPort()));// 连接FTP服务器 + ftpClient.login(ossConfig.getUsername(), ossConfig.getPassword());// 登陆FTP服务器 + // 设置文件类型为二进制(如果从FTP下载或上传的文件是压缩文件的时候,不进行该设置可能会导致获取的压缩文件解压失败) + ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); +// ftpClient.enterLocalPassiveMode();//开启被动模式,否则文件上传不成功,也不报错 + if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { + log.info("连接FTP失败,用户名或密码错误。"); + ftpClient.disconnect(); + } else { + log.info("FTP连接成功!"); + } + } catch (Exception e) { + log.info("登陆FTP失败,请检查FTP相关配置信息是否正确!" + e); + return null; + } + return ftpClient; + } + + @Override + public PooledObject wrap(ChannelSftp channelSftp) { + return new DefaultPooledObject<>(channelSftp); + } + + // 销毁对象 + @Override + public void destroyObject(PooledObject p) { + ChannelSftp channelSftp = p.getObject(); + channelSftp.disconnect(); + } + +} \ No newline at end of file diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPool.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPool.java new file mode 100644 index 00000000..f14f3442 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPool.java @@ -0,0 +1,41 @@ +package com.dxhy.oss.utils; + +import com.jcraft.jsch.ChannelSftp; +import lombok.Data; +import org.apache.commons.pool2.impl.GenericObjectPool; + +@Data +public class SftpPool { + + private GenericObjectPool pool; + + public SftpPool(SftpFactory factory) { + this.pool = new GenericObjectPool<>(factory, factory.getOssConfig().getPool()); + } + + /** + * 获取一个sftp连接对象 + * + * @return sftp连接对象 + */ + public ChannelSftp borrowObject() throws SftpPoolException { + try { + return pool.borrowObject(); + } catch (Exception e) { + e.printStackTrace(); + throw new SftpPoolException("获取ftp连接失败", e); + } + } + + /** + * 归还一个sftp连接对象 + * + * @param channelSftp sftp连接对象 + */ + public void returnObject(ChannelSftp channelSftp) { + if (channelSftp != null) { + pool.returnObject(channelSftp); + } + } + +} \ No newline at end of file diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPoolException.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPoolException.java new file mode 100644 index 00000000..7ed1f109 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPoolException.java @@ -0,0 +1,15 @@ +package com.dxhy.oss.utils; + + +/** + * @author jiaohongyang + * @date 2019年3月26日 下午5:57:26 + */ + +public class SftpPoolException extends Exception { + public SftpPoolException(String message, Exception e) { + super(message, e); + } + + +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java new file mode 100644 index 00000000..3ad51d4a --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java @@ -0,0 +1,61 @@ +package com.dxhy.oss.utils; + +import com.jcraft.jsch.ChannelSftp; +import lombok.Data; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Data +@ConfigurationProperties(prefix = "ftp.connection") +public class SftpProperties { + + private String hostname; + private String port = "22"; + private String username; + private String password; + private String timeout; + private Pool pool = new Pool(); + + public static class Pool extends GenericObjectPoolConfig { + + private int maxTotal = DEFAULT_MAX_TOTAL; + private int maxIdle = DEFAULT_MAX_IDLE; + private int minIdle = DEFAULT_MIN_IDLE; + + public Pool() { + super(); + } + + @Override + public int getMaxTotal() { + return maxTotal; + } + + @Override + public void setMaxTotal(int maxTotal) { + this.maxTotal = maxTotal; + } + + @Override + public int getMaxIdle() { + return maxIdle; + } + + @Override + public void setMaxIdle(int maxIdle) { + this.maxIdle = maxIdle; + } + + @Override + public int getMinIdle() { + return minIdle; + } + + @Override + public void setMinIdle(int minIdle) { + this.minIdle = minIdle; + } + + } + +} \ No newline at end of file diff --git a/dxhy-oss/src/test/java/com/dxhy/DxhyOssApplication.java b/dxhy-oss/src/test/java/com/dxhy/DxhyOssApplication.java new file mode 100644 index 00000000..23ddaada --- /dev/null +++ b/dxhy-oss/src/test/java/com/dxhy/DxhyOssApplication.java @@ -0,0 +1,13 @@ +package com.dxhy; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; + +@SpringBootApplication +@ComponentScan("com.dxhy.*") +public class DxhyOssApplication { + public static void main(String[] args) { + SpringApplication.run(DxhyOssApplication.class, args); + } +} diff --git a/dxhy-oss/src/test/java/com/dxhy/OfdHandle.java b/dxhy-oss/src/test/java/com/dxhy/OfdHandle.java new file mode 100644 index 00000000..36b80b49 --- /dev/null +++ b/dxhy-oss/src/test/java/com/dxhy/OfdHandle.java @@ -0,0 +1,40 @@ +package com.dxhy; + + +import com.dxhy.oss.model.FileModel; +import com.dxhy.oss.service.FileService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +import java.io.File; + +/** + * @author user + */ +@SuppressWarnings("FieldCanBeLocal") +@Slf4j +public class OfdHandle extends Thread { + + private final File file; + + @Autowired + private FileService fileService; + + public OfdHandle(File file) { + this.file = file; + + } + + @Override + public void run() { + + fileService = (FileService) SpringContextUtils.getBean("fileService"); + FileModel fileModel = new FileModel(); + try { + fileModel = fileService.uploadFile(file.getPath(), file.getPath()); + } catch (Exception e) { + e.printStackTrace(); + } + log.info("文件上传返回结果:" + fileModel.getCode() + " " + fileModel.getFilePath()); + } +} diff --git a/dxhy-oss/src/test/java/com/dxhy/OssTest.java b/dxhy-oss/src/test/java/com/dxhy/OssTest.java new file mode 100644 index 00000000..73f9911d --- /dev/null +++ b/dxhy-oss/src/test/java/com/dxhy/OssTest.java @@ -0,0 +1,127 @@ +package com.dxhy; + +import java.io.File; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import com.dxhy.oss.model.FileModel; +import com.dxhy.oss.service.FileService; + +import cn.hutool.core.io.FileUtil; + +/** + * @author jiaohongyang(焦红阳) + * @date 2020-09-30 + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = DxhyOssApplication.class) +public class OssTest { + @Resource + private FileService fileService; + + @Test + public void ossUploadTest() { + String fileName = "/GYL/YONGHUI/2022/09/08/update.zip"; + String originFileName = "/Users/jiaohongyang/product/project/project/jxpt/ofd/pdf/update.zip"; + FileModel fileModel = new FileModel(); + try { + fileModel = fileService.uploadFile(fileName, originFileName); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("文件上传返回结果:" + fileModel.getCode() + " " + fileModel.getFilePath()); + + } + + @Test + public void ossGylUploadTest() { + String fileName = "/GYL/DUODIAN/2022/12/07/update.zip"; + String originFileName = "/Users/jiaohongyang/product/project/project/jxpt/ofd/pdf/update.zip"; + FileModel fileModel = new FileModel(); + try { + fileModel = fileService.uploadFile(fileName, originFileName); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("文件上传返回结果:" + fileModel.getCode() + " " + fileModel.getFilePath()); + + } + + @Test + public void ossGylSdlpUploadTest() { + String fileName = "/GYL/SDLP/2022/09/20/51发票助手_local_J_1.4.8.exe"; + String originFileName = "/Users/jiaohongyang/product/project/project/jxpt/ofd/pdf/51发票助手_local_J_1.4.8.exe"; + FileModel fileModel = new FileModel(); + try { + fileModel = fileService.uploadFile(fileName, originFileName); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("文件上传返回结果:" + fileModel.getCode() + " " + fileModel.getFilePath()); + + } + + @Test + public void ossDownloadTest() { + String downloadFile = "/jxfp/pdf/2022/1111/dxhy-admin.jar"; + // String downloadFile = "/jxfp/excel/2020/10/12/1282510566564315137_进项票据采集_2020-10-12_1602489969696.xlsx"; + String saveFile = "/Users/jiaohongyang/product/project/project/jxpt/ofd/pdf/dxhy-admin.jar"; + FileModel fileModel = new FileModel(); + try { + fileModel = fileService.downFile(downloadFile, saveFile); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("文件下载返回结果" + fileModel.getCode() + " " + fileModel.getFilePath()); + } + + @Test + public void ossgetUrlTest() { + String key = "/GYL/SDLP/2022/09/14/供应链协同开票助手-v1.1.0.1.20220914-x86_Setup.zip"; + FileModel fileModel = fileService.getUrl(key); + System.out.println(fileModel.getCode() + " " + fileModel.getFilePath()); + + } + + @Test + public void ossDeleteTest() { + String downloadFile = "GYL/DUODIAN/2022/12/01/20221201(1.1.0.2).zip"; + FileModel fileModel = new FileModel(); + try { + fileModel = fileService.deleteFile(downloadFile); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("文件删除返回结果" + fileModel.getCode()); + + } + + @Test + public void ossPush() { + String path = "/Volumes/product/PDF/"; + try { + File[] ls = FileUtil.ls(path); + ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2000, 10000, 60L, TimeUnit.SECONDS, + new LinkedBlockingQueue<>(ls.length), r -> new Thread(r, "oss推送-" + r.hashCode())); + for (File file : ls) { + if (!threadPoolExecutor.isShutdown()) { + threadPoolExecutor.execute(new OfdHandle(file)); + } + } + threadPoolExecutor.shutdown(); + threadPoolExecutor.awaitTermination(60, TimeUnit.SECONDS); + } catch (Exception e) { + e.printStackTrace(); + } + + } + +} diff --git a/dxhy-oss/src/test/java/com/dxhy/SpringContextUtils.java b/dxhy-oss/src/test/java/com/dxhy/SpringContextUtils.java new file mode 100644 index 00000000..37d9358c --- /dev/null +++ b/dxhy-oss/src/test/java/com/dxhy/SpringContextUtils.java @@ -0,0 +1,43 @@ +package com.dxhy; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * Spring Context 工具类 + * + * @author jiaohongyang + */ +@Component + +public class SpringContextUtils implements ApplicationContextAware { + public static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtils.applicationContext = applicationContext; + } + + public static Object getBean(String name) { + return applicationContext.getBean(name); + } + + public static T getBean(String name, Class requiredType) { + return applicationContext.getBean(name, requiredType); + } + + public static boolean containsBean(String name) { + return applicationContext.containsBean(name); + } + + public static boolean isSingleton(String name) { + return applicationContext.isSingleton(name); + } + + public static Class getType(String name) { + return applicationContext.getType(name); + } + +} diff --git a/dxhy-oss/src/test/resources/application.yml b/dxhy-oss/src/test/resources/application.yml new file mode 100644 index 00000000..a56547cc --- /dev/null +++ b/dxhy-oss/src/test/resources/application.yml @@ -0,0 +1,48 @@ +#oss: +# ossType: AL +# endpointUrl: http://oss-accelerate.aliyuncs.com +# accessKeyId: LTAI4G6XxTTwUzcY3ByWa6Yb +# accessKeySecret: kkgPJ4DIvkOcvfZPl4BE1FVqyQlPiq +# region: +# bucketName: jiaohongyang +#oss: +# ossType: JD +# endpointUrl: https://storage.jd.local +# accessKeyId: bfac05320eaf11cc80cf1823e4fb87d98523fc94 +# accessKeySecret: 70ec454ffb302043a7837417e0909e12d1288d0b +# region: cn-north-1 +# bucketName: input-tax-invoice +#oss: +# ossType: AL +# endpointUrl: http://oss-cn-beijing-internal.aliyuncs.com +# accessKeyId: LTAI4GHGCEiWsXxTZ651wV22 +# accessKeySecret: hTXim31f5JmIMz3rcj7WIopKAUscsE +# region: +# bucketName: guowangtest +#oss: +# ossType: MINIO +# endpointUrl: http://10.1.2.107:9000 +# accessKeyId: minioadmin +# accessKeySecret: minioadmin +# region: +# bucketName: jxpt +oss: + ossType: JD + endpointUrl: https://s3.cn-north-1.jdcloud-oss.com + accessKeyId: 4B2A089EA1C8F776357A15948DBCA363 + accessKeySecret: 570296481BA33BFC4A8C9EEB5E00652A + region: cn-north-1 + bucketName: jxdownload +ftp: + connection: + hostname: 10.1.2.87 + username: dxhy1 + password: dxhy + port: 62236 + timeout: 60000 + pathPrefix: /jxfp/excel/ + # 连接池参数 + pool: + max-total: 10 + max-idle: 10 + min-idle: 5 diff --git a/dxhy-portrait/pom.xml b/dxhy-portrait/pom.xml index b6f5bb4f..d8a40f64 100644 --- a/dxhy-portrait/pom.xml +++ b/dxhy-portrait/pom.xml @@ -106,7 +106,7 @@ com.dxhy.jxpt dxhy-oss - 3.2.9 + 3.3.3 com.alibaba.cloud diff --git a/dxhy-sign/pom.xml b/dxhy-sign/pom.xml index 7d1b45e3..5d58f456 100644 --- a/dxhy-sign/pom.xml +++ b/dxhy-sign/pom.xml @@ -118,7 +118,7 @@ com.dxhy.jxpt dxhy-oss - 3.2.9 + 3.3.3 com.alibaba.cloud diff --git a/pom.xml b/pom.xml index 1886e621..db1f034d 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ dxhy-admin dxhy-gateway dxhy-base + dxhy-oss dxhy-core dxhy-erp dxhy-extend From 41e1e2c7dc3f7ac538a8dd7a75d84adbd6aaeb95 Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 30 May 2023 19:31:29 +0800 Subject: [PATCH 02/94] =?UTF-8?q?ariesy=20=E5=AF=BC=E5=87=BA=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=B8=8D=E8=83=BD=E8=B6=85=E8=BF=875000=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dxhy/core/thread/FpcjhzExportThread.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/dxhy-core/src/main/java/com/dxhy/core/thread/FpcjhzExportThread.java b/dxhy-core/src/main/java/com/dxhy/core/thread/FpcjhzExportThread.java index c2b775a8..9c0c6796 100644 --- a/dxhy-core/src/main/java/com/dxhy/core/thread/FpcjhzExportThread.java +++ b/dxhy-core/src/main/java/com/dxhy/core/thread/FpcjhzExportThread.java @@ -169,14 +169,18 @@ public class FpcjhzExportThread extends BaseThread { excelFile.append(ftpFileName.toString()); // 递归导出数据到excel - this.cicleExport(pramsMap, default_curr, excelFile.toString(), jsonObject); - - // FTP文件存储路径 - String[] toDay = DateUtil.today().split("-"); - String ftpFilePath = fileService.getPathPrefix() + userName + "/" + "excelFile/" + toDay[0] + "/" - + toDay[1] + "/" + toDay[2] + "/" + ftpFileName.toString(); - // 文件上传ftp - fileService.uploadFile(ftpFilePath, excelFile.toString()); + String ftpFilePath = ""; + String rtnMsg = this.cicleExport(pramsMap, default_curr, excelFile.toString(), jsonObject); + if("ok".equals(rtnMsg)) { + // FTP文件存储路径 + String[] toDay = DateUtil.today().split("-"); + ftpFilePath = fileService.getPathPrefix() + userName + "/" + "excelFile/" + toDay[0] + "/" + + toDay[1] + "/" + toDay[2] + "/" + ftpFileName.toString(); + // 文件上传ftp + fileService.uploadFile(ftpFilePath, excelFile.toString()); + }else{ + ftpFilePath = rtnMsg; + } // 设置成功消息内容 msg.put("title", super.getSuccTitle(title)); @@ -222,12 +226,15 @@ public class FpcjhzExportThread extends BaseThread { * */ - private boolean cicleExport(Map pramsMap, int curr, String excelFile, JSONObject jsonObject) + private String cicleExport(Map pramsMap, int curr, String excelFile, JSONObject jsonObject) throws Exception { // 查询指定页数的数据 JSONObject pageData = fpcjService.selectByGfshAndCjrq(pramsMap, curr, default_size); boolean hasNext = pageData.getBooleanValue("hasNext"); List dataList = (List)pageData.get("datalist"); + if(dataList.size() > 5000){ + return "数据不能超过5000条"; + } boolean firstPage = false; if (curr == default_curr) { @@ -243,7 +250,7 @@ public class FpcjhzExportThread extends BaseThread { // 写入当前页数据 ExcelPoiUtil.exportListArrayToExcel1(excelFile, title, jsonObject, dataList, firstPage, false); // 更新页数 - return cicleExport(pramsMap, nextPage, excelFile, jsonObject); + cicleExport(pramsMap, nextPage, excelFile, jsonObject); } else { // 写入最后一页数据 FpcjCjhzRespVO vo = new FpcjCjhzRespVO(); @@ -253,7 +260,7 @@ public class FpcjhzExportThread extends BaseThread { vo.setSe(hjse); dataList.add(vo); ExcelPoiUtil.exportListArrayToExcel1(excelFile, title, jsonObject, dataList, firstPage, true); - return hasNext; } + return "ok"; } } From 46bb8bcdeef3a398457fd2b6ad4653b52f268843 Mon Sep 17 00:00:00 2001 From: yishiqihuasheng <1191093413@qq.com> Date: Wed, 31 May 2023 08:48:18 +0800 Subject: [PATCH 03/94] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E7=9B=B8=E5=8F=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dxhy/base/controller/BaseInvoiceController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java index ac966283..6e78530b 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java +++ b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java @@ -840,11 +840,11 @@ public class BaseInvoiceController extends AbstractController { String menuId = (String)map.get("menuId"); String company = (String)map.get("company"); - if (StringUtils.isNotBlank(inAccountStatus)){ + if (StringUtils.isBlank(inAccountStatus)){ return ResponseEntity.ok(R.error("入账状态不能为空")); } - if (StringUtils.isNotBlank(maxTax)){ + if (StringUtils.isBlank(maxTax)){ return ResponseEntity.ok(R.error("税额上限不能为空")); } From 9f6c74151f8cfb6a3eb4aa17e4d87c98e434328b Mon Sep 17 00:00:00 2001 From: yishiqihuasheng <1191093413@qq.com> Date: Thu, 1 Jun 2023 09:52:23 +0800 Subject: [PATCH 04/94] =?UTF-8?q?=E6=99=BA=E8=83=BD=E5=8B=BE=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dxhy/base/controller/BaseInvoiceController.java | 2 ++ dxhy-core/src/main/resources/mapper/FpZhMapper.xml | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java index 3767281e..251bca6c 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java +++ b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java @@ -873,6 +873,8 @@ public class BaseInvoiceController extends AbstractController { String maxTax = (String) map.get("maxTax"); String menuId = (String)map.get("menuId"); String company = (String)map.get("company"); + int curr = (int) map.get("curr"); + int size = (int) map.get("size"); if (StringUtils.isBlank(inAccountStatus)){ return ResponseEntity.ok(R.error("入账状态不能为空")); diff --git a/dxhy-core/src/main/resources/mapper/FpZhMapper.xml b/dxhy-core/src/main/resources/mapper/FpZhMapper.xml index 28250108..4ced888f 100644 --- a/dxhy-core/src/main/resources/mapper/FpZhMapper.xml +++ b/dxhy-core/src/main/resources/mapper/FpZhMapper.xml @@ -100,7 +100,6 @@ and t.bdk_status in ('1','2') and t.export_mark = '0' and t.auth_status != '0' - and t.rzh_yesorno != '0' and t.company = #{company} and t.gf_tax_no in From f30a852371d484a10ede204f971b72e038a5f871 Mon Sep 17 00:00:00 2001 From: yishiqihuasheng <1191093413@qq.com> Date: Thu, 1 Jun 2023 11:04:54 +0800 Subject: [PATCH 05/94] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=AE=9E=E5=90=8D?= =?UTF-8?q?=E5=AE=A2=E7=A5=A8=E5=9B=A0=E4=B8=BA=E4=BB=A3=E7=A0=81=E8=A6=86?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E6=8C=87=E9=92=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dxhy/erp/service/SNPushCheckRecordService.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java index d77173f5..3f963953 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java @@ -10,6 +10,7 @@ import com.dxhy.common.datasource.config.DynamicContextHolder; import com.dxhy.common.enums.FplxEnum; import com.dxhy.common.enums.SNFplxEnum; import com.dxhy.common.util.InvoiceUtil; +import com.dxhy.common.util.StringHelper; import com.dxhy.common.vo.UserInfo; import com.dxhy.erp.dao.*; import com.dxhy.erp.entity.*; @@ -718,8 +719,13 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { log.info("uuid={}", uuid); reimburse.setSelectId(uuid); - reimburse.setTaxRate(invoice.getTaxRate()); - reimburse.setTaxCode(getTaxCode(invoice.getTaxRate())); + if (StringHelper.isNotBlank(invoice.getTaxRate())){ + reimburse.setTaxRate(invoice.getTaxRate()); + reimburse.setTaxCode(getTaxCode(invoice.getTaxRate())); + }else { + reimburse.setTaxRate("0%"); + reimburse.setTaxCode(getTaxCode(reimburse.getTaxRate())); + } reimburse.setIsDeduction(invoice.getIsDeductible()); if (StringUtils.isNoneBlank(reimburse.getInvoiceCode())) { From 940ce282d10e8f68303dab7229cb7a301dde4909 Mon Sep 17 00:00:00 2001 From: yishiqihuasheng <1191093413@qq.com> Date: Thu, 1 Jun 2023 11:18:28 +0800 Subject: [PATCH 06/94] =?UTF-8?q?=E7=A9=BA=E6=8C=87=E9=92=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/service/tdxrecordinvoice/BaseFpdrrzServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/service/tdxrecordinvoice/BaseFpdrrzServiceImpl.java b/dxhy-base/src/main/java/com/dxhy/base/service/tdxrecordinvoice/BaseFpdrrzServiceImpl.java index 5b7f9c5f..8e3ead7e 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/service/tdxrecordinvoice/BaseFpdrrzServiceImpl.java +++ b/dxhy-base/src/main/java/com/dxhy/base/service/tdxrecordinvoice/BaseFpdrrzServiceImpl.java @@ -146,7 +146,7 @@ public class BaseFpdrrzServiceImpl extends MpBaseServiceImpl queryRecord = new QueryWrapper<>(); queryRecord.eq("uuid", uuid); BaseTDxRecordInvoice rdxRecordInvoice = baseTDxRecordInvoiceDao.selectOne(queryRecord); - if (StringHelper.isNotBlank(rdxRecordInvoice.getDkTaxAmount().toPlainString())){ + if (rdxRecordInvoice.getDkTaxAmount() != null && StringHelper.isNotBlank(rdxRecordInvoice.getDkTaxAmount().toPlainString())){ rzlb.setDkse(rdxRecordInvoice.getDkTaxAmount().toPlainString()); } if (rdxRecordInvoice != null) { From e8006c2e0d5e73ed99937844bd978e46dfd41b0b Mon Sep 17 00:00:00 2001 From: yishiqihuasheng <1191093413@qq.com> Date: Thu, 1 Jun 2023 17:02:10 +0800 Subject: [PATCH 07/94] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=94=80=E9=A1=B9?= =?UTF-8?q?=E6=A0=87=E8=AF=86=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/dxhy/erp/model/ZDATA.java | 2 ++ .../service/impl/InvoiceAuthServiceImpl.java | 29 +++++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/model/ZDATA.java b/dxhy-erp/src/main/java/com/dxhy/erp/model/ZDATA.java index 03cc5312..ca2c0887 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/model/ZDATA.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/model/ZDATA.java @@ -36,4 +36,6 @@ public class ZDATA { private String BELNR; @JsonProperty(value = "BUDAT") private String BUDAT; + @JsonProperty(value = "XXBS") + private String XXBS; } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/InvoiceAuthServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/InvoiceAuthServiceImpl.java index f80d945f..7935c53b 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/InvoiceAuthServiceImpl.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/InvoiceAuthServiceImpl.java @@ -362,8 +362,10 @@ public class InvoiceAuthServiceImpl extends MpBaseServiceImpl Date: Fri, 2 Jun 2023 10:50:23 +0800 Subject: [PATCH 08/94] =?UTF-8?q?Merge=20branch=20'test'=20of=20D:\?= =?UTF-8?q?=E6=A1=8C=E9=9D=A2\=E5=B1=B1=E8=83=BD\pt=20with=20conflicts.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dxhy/erp/controller/SDNYMainProcessController.java | 5 +++++ .../java/com/dxhy/erp/service/SNPushCheckRecordService.java | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java index d3a54b26..7923e143 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java @@ -263,6 +263,8 @@ public class SDNYMainProcessController extends AbstractController { log.info("查验结果为:{}", checkInvoiceResult); } catch (Exception e) { e.printStackTrace(); + log.error("查验失败,errormsg:{}",e.getMessage()); + return ResponseEntity.ok(JSONObject.toJSONString(R.error("查验失败,"+e.getMessage()))); } if (!checkInvoiceResult.containsKey("code")) { @@ -452,6 +454,9 @@ public class SDNYMainProcessController extends AbstractController { for (int i = 0; i < detailList.size(); i++) { String taxRateDetail = ""; JSONObject detail = (JSONObject) detailList.get(i); + if(StringUtils.isNotEmpty(detail.getString("goodsName")) && detail.getString("goodsName").contains("详见销货清单")){ + continue; + } Map snDetailMap = new HashMap(); snDetailMap.put("rowNo", i + 1 + ""); snDetailMap.put("commodityCode", detail.getString("goodsNum")); diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java index 3f963953..46d5a178 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java @@ -451,7 +451,8 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { jsonObject.put("tonnage", invoiceData.get("dw")); jsonObject.put("limitPeople", invoiceData.get("xcrs")); String taxRate = ""; - if ("免税".equals(invoiceData.get("sl"))) { + if (invoiceData.get("sl")==null||StringUtils.isBlank(invoiceData.get("sl").toString())|| + "免税".equals(invoiceData.get("sl").toString())|| "不征税".equals(invoiceData.get("sl").toString()) || "***".equals(invoiceData.get("sl").toString())) { taxRate = "0"; jsonObject.put("taxRate", taxRate); } else { @@ -726,6 +727,7 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { reimburse.setTaxRate("0%"); reimburse.setTaxCode(getTaxCode(reimburse.getTaxRate())); } + reimburse.setIsDeduction(invoice.getIsDeductible()); if (StringUtils.isNoneBlank(reimburse.getInvoiceCode())) { From 712b4e1dfcbc8e986c03d858bd930c6e8a7d1add Mon Sep 17 00:00:00 2001 From: yishiqihuasheng <1191093413@qq.com> Date: Fri, 2 Jun 2023 16:31:09 +0800 Subject: [PATCH 09/94] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dxhy/common/service/impl/DictdetaServciceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/dxhy-common/src/main/java/com/dxhy/common/service/impl/DictdetaServciceImpl.java b/dxhy-common/src/main/java/com/dxhy/common/service/impl/DictdetaServciceImpl.java index 7cf18049..a57096ad 100644 --- a/dxhy-common/src/main/java/com/dxhy/common/service/impl/DictdetaServciceImpl.java +++ b/dxhy-common/src/main/java/com/dxhy/common/service/impl/DictdetaServciceImpl.java @@ -34,7 +34,6 @@ public class DictdetaServciceImpl implements DictdetaServcice { @Override public String queryDictName(String type,String code) { - log.info("type={},code={}",type,code); String dictJson = redisUtils.get(RedisConstant.KEY_DICT + type); List dictdetaModels = JSON.parseArray(dictJson, DictdetaModel.class); Map collect = dictdetaModels.stream().collect(Collectors.toMap(DictdetaModel::getDictcode, DictdetaModel::getDictname)); From 8cffce33b7003248e65f92634cac636463fc769c Mon Sep 17 00:00:00 2001 From: gaorl Date: Fri, 2 Jun 2023 21:59:53 +0800 Subject: [PATCH 10/94] =?UTF-8?q?feature=EF=BC=9A=E8=BF=9B=E9=A1=B9?= =?UTF-8?q?=E7=9A=84ssh=20=E6=94=B9=E4=B8=BAftp=E5=8D=8F=E8=AE=AE=E5=92=8C?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dxhy/oss/config/OssReturnConfig.java | 2 + .../java/com/dxhy/oss/service/FtpService.java | 202 ++++++------------ .../oss/service/impl/FileServiceImpl.java | 100 ++++++++- .../java/com/dxhy/oss/utils/SftpFactory.java | 53 ++--- .../java/com/dxhy/oss/utils/SftpPool.java | 14 +- .../com/dxhy/oss/utils/SftpProperties.java | 5 +- 6 files changed, 182 insertions(+), 194 deletions(-) diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java b/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java index 2ca3c1d5..22140e07 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java @@ -17,6 +17,8 @@ public interface OssReturnConfig { String FTP = "FTP"; + String LOCAL = "LOCAL"; + String TOS = "TOS"; String MINIO = "MINIO"; diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java index c82fe0fb..300ffd34 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java @@ -1,25 +1,16 @@ package com.dxhy.oss.service; -import cn.hutool.core.io.FileUtil; import com.dxhy.oss.utils.SftpPool; -import com.jcraft.jsch.ChannelSftp; -import com.jcraft.jsch.SftpException; +import com.dxhy.oss.utils.SftpPoolException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; +import java.io.*; import java.util.ArrayList; import java.util.List; -/** - * @author jiaohongyang - */ @Slf4j public class FtpService { @@ -30,67 +21,21 @@ public class FtpService { } /** - * 将输入流的数据上传到sftp作为文件。文件完整路径 = basePath+directory + * ftp上传文件 * - * @param pathName ftp服务保存地址,完整路径 - * @param fileName 上传到ftp的文件名 - * @param originFileName 待上传文件的名称(绝对地址) + * @param serviceDec + * @param fileName + * @param localDec 本地目录 + * @return */ - - public boolean uploadFile(String pathName, String fileName, String originFileName) throws InterruptedException { - log.info("开始上传文件"); - ChannelSftp sftp = null; - InputStream inputStream; - try { - sftp = pool.borrowObject(); - try { - sftp.cd(pathName); - } catch (SftpException e) { - // 目录不存在,则创建文件夹 - String[] dirs = pathName.split("/"); - String tempPath = ""; - for (String dir : dirs) { - if (null == dir || "".equals(dir)) { - continue; - } - tempPath += "/" + dir; - try { - sftp.cd(tempPath); - } catch (SftpException ex) { - try { - sftp.mkdir(tempPath); - sftp.cd(tempPath); - } catch (SftpException e1) { - e1.printStackTrace(); - } - } - } - } - - File orgFile = new File(originFileName); - inputStream = Files.newInputStream(orgFile.toPath()); - sftp.put(inputStream, fileName); - inputStream.close(); - // 删除本地文件,防止服务器空间不足 - FileUtil.del(orgFile); - log.info("上传文件成功"); - return true; - } catch (Exception e) { - e.printStackTrace(); - log.info("上传文件失败"); - return false; - } finally { - if (sftp != null) { - log.info("回收线程"); - pool.returnObject(sftp); - } - - } - } - - public static boolean uploadFile(FTPClient ftpClient, String serviceDec, String fileName, InputStream inputStream) { + public boolean uploadFile( String serviceDec, String fileName, String localDec) throws InterruptedException { + FTPClient ftpClient = null; + InputStream inputStream = null; + boolean result =true; try { + inputStream = new FileInputStream(new File(localDec)); log.info("开始上传文件"); + ftpClient = pool.borrowObject(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); createDirecroty(ftpClient, serviceDec); ftpClient.makeDirectory(serviceDec); @@ -100,7 +45,9 @@ public class FtpService { ftpClient.logout(); log.info("上传文件成功"); } catch (Exception e) { + e.printStackTrace(); log.error("上传文件失败" + e); + result =false; } finally { try { if (ftpClient.isConnected()) { @@ -111,10 +58,26 @@ public class FtpService { } } catch (IOException e) { log.error("上传文件失败" + e); - return false; + result =false; + } + } + return result; + } + + public boolean deleteFile(String directory, String deleteFile) { + FTPClient ftpClient = null; + try { + ftpClient = pool.borrowObject(); + return ftpClient.deleteFile(directory + File.separator + deleteFile); + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + if (ftpClient != null) { + log.info("回收线程"); + pool.returnObject(ftpClient); } } - return true; } private static boolean createDirecroty(FTPClient ftpClient, String remote) throws IOException { @@ -232,20 +195,41 @@ public class FtpService { } return list; } - public File downloadFile(FTPClient ftpClient, String servicePath, String fileName, String localFilePath) { - String name = dowFile(ftpClient, servicePath, fileName, localFilePath); - if (name != null && !name.equals("")){ - return new File(fileName); + /** + * @param servicePath ftp的路径 + * @param fileName 文件名称 + * @param localFilePath 下载到本地的文件夹 + * @return + */ + public boolean downloadFile(String servicePath, String fileName, String localFilePath) { + FTPClient ftpClient; + try { + ftpClient = pool.borrowObject(); + String name = dowFile(ftpClient, servicePath, fileName, localFilePath); + if (name != null && !name.equals("")){ + return true; + } + } catch (SftpPoolException e) { + e.printStackTrace(); } - return null; + return false; } + /** + * + * @param ftpClient + * @param servicePath ftp的路径 + * @param fileName 文件名称 + * @param localFilePath 下载到本地的文件夹 + * @return + */ private static String dowFile(FTPClient ftpClient, String servicePath, String fileName, String localFilePath) { InputStream is = null; FileOutputStream fos = null; try { ftpClient.enterLocalPassiveMode(); is = ftpClient.retrieveFileStream(servicePath + fileName);// 获取ftp上的文件 + directoryIsExists(localFilePath); fos = new FileOutputStream(new File(localFilePath + fileName)); // 文件读取方式一 int i; @@ -253,16 +237,14 @@ public class FtpService { while ((i = is.read(bytes)) != -1) { fos.write(bytes, 0, i); } - // 文件读取方式二 - //ftpClient.retrieveFile(ftpFilePath, new FileOutputStream(new File(localFilePath))); ftpClient.completePendingCommand(); log.info("FTP文件下载成功!"); } catch (Exception e) { log.error("FTP文件下载失败!" + e); } finally { try { - if (fos != null) fos.close(); - if (is != null) is.close(); + if (fos != null) {fos.close();} + if (is != null) {is.close();} } catch (IOException e) { log.error("下载流关闭失败" + e); return null; @@ -271,68 +253,8 @@ public class FtpService { return localFilePath + fileName; } - public boolean downloadFile(String directory, String downloadFile, String saveFile) { - log.info("开始下载文件!"); - ChannelSftp sftp = null; - try { - sftp = pool.borrowObject(); - if (directory != null && !"".equals(directory)) { - sftp.cd(directory); - } - String file = saveFile + "/" + downloadFile; - File fileLocal = new File(file); - if (fileLocal.exists()) { - boolean delete = fileLocal.delete(); - log.info("删除本地路径文件:{}", delete); - } - this.directoryIsExists(saveFile); - sftp.get(downloadFile, file); - log.info("下载文件成功!"); - return true; - } catch (Exception e) { - e.printStackTrace(); - log.info("下载文件失败!"); - return false; - } finally { - if (sftp != null) { - log.info("回收线程"); - pool.returnObject(sftp); - } - - } - - - } - - - /** - * 删除文件 - * - * @param directory 要删除文件所在目录 - * @param deleteFile 要删除的文件 - * @return 返回是否删除成功 - */ - - public boolean deleteFile(String directory, String deleteFile) { - ChannelSftp sftp = null; - try { - sftp = pool.borrowObject(); - sftp.cd(directory); - sftp.rm(deleteFile); - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } finally { - if (sftp != null) { - log.info("回收线程"); - pool.returnObject(sftp); - } - } - } - - public void directoryIsExists(String path) { + public static void directoryIsExists(String path) { File directory = new File(path); if (directory.exists()) { return; diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java index ad62dea6..8f948867 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java @@ -13,6 +13,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; /** * @author jiaohongyang @@ -42,7 +45,7 @@ public class FileServiceImpl implements FileService { * @throws Exception 异常 */ @Override - public FileModel uploadFile(String fileName, String originFileName) throws Exception { + public FileModel uploadFile(String fileName, String originFileName) { log.info("上传文件地址:{} , 本地存储文件地址:{}", fileName, originFileName); FileModel fileModel; if (OssReturnConfig.AL.equals(ossConfig.getOssType())) { @@ -64,7 +67,54 @@ public class FileServiceImpl implements FileService { String directory = fileName.substring(0, fileName.lastIndexOf("/")); File directoryFile = new File(fileName); String downloadFileName = directoryFile.getName(); - boolean b = ftpService.uploadFile(directory, downloadFileName, originFileName); + boolean b = false; + try { + b = ftpService.uploadFile(directory, downloadFileName, originFileName); + } catch (InterruptedException e) { + log.error(e.getMessage()); + } + fileModel = new FileModel(); + fileModel.setFilePath(fileName); + if (b) { + fileModel.setCode(OssReturnConfig.SUCCESS); + } else { + fileModel.setCode(OssReturnConfig.ERROR_09); + } + } else if(OssReturnConfig.LOCAL.equals(ossConfig.getOssType())){ + //创建目录 + boolean b = false; + FileInputStream fis = null; + FileOutputStream fos = null; + try { + File directory = new File(fileName.substring(0, fileName.lastIndexOf("/"))); + if(!directory.exists()){ + directory.mkdirs(); + } + File sourceFile = new File(originFileName); + + File file = new File(fileName); + if(!file.exists()){ + file.createNewFile(); + } + fis = new FileInputStream(sourceFile); + fos = new FileOutputStream(file); + //复制文件 + byte[] bytes = new byte[1024]; + while (fis.read(bytes) != -1){ + fos.write(bytes); + } + fos.flush(); + b = true; + } catch (IOException e) { + e.printStackTrace(); + }finally { + try { + if(fis != null){fis.close();} + if(fos != null){fos.close();} + } catch (IOException e) { + log.error("上传文件关闭文件流异常:{}",e.getMessage()); + } + } fileModel = new FileModel(); fileModel.setFilePath(fileName); if (b) { @@ -112,7 +162,39 @@ public class FileServiceImpl implements FileService { fileModel.setCode(OssReturnConfig.ERROR_09); } - + } else if(OssReturnConfig.LOCAL.equals(ossConfig.getOssType())){ + //创建目录 + boolean b = false; + FileInputStream fis = null; + FileOutputStream fos = null; + try { + File download = new File(downloadFile.substring(0, downloadFile.lastIndexOf("/"))); + fis = new FileInputStream(download); + fos = new FileOutputStream(file); + //复制文件 + byte[] bytes = new byte[1024]; + while (fis.read(bytes) != -1){ + fos.write(bytes); + } + fos.flush(); + b = true; + } catch (IOException e) { + e.printStackTrace(); + }finally { + try { + if(fis != null){fis.close();} + if(fos != null){fos.close();} + } catch (IOException e) { + log.error("上传文件关闭文件流异常:{}",e.getMessage()); + } + } + fileModel = new FileModel(); + fileModel.setFilePath(saveFile); + if (b) { + fileModel.setCode(OssReturnConfig.SUCCESS); + } else { + fileModel.setCode(OssReturnConfig.ERROR_09); + } } else { fileModel = new FileModel(); fileModel.setCode(OssReturnConfig.ERROR_09); @@ -162,7 +244,17 @@ public class FileServiceImpl implements FileService { fileModel = new FileModel(); fileModel.setCode(OssReturnConfig.ERROR_01); } - } else { + } else if(OssReturnConfig.LOCAL.equals(ossConfig.getOssType())){ + File file = new File(path); + boolean b = file.delete(); + if (b) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + } else { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_01); + } + }else{ fileModel = new FileModel(); fileModel.setCode(OssReturnConfig.ERROR_09); } diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpFactory.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpFactory.java index 8695b5d6..d694dc7a 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpFactory.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpFactory.java @@ -1,9 +1,5 @@ package com.dxhy.oss.utils; -import com.jcraft.jsch.ChannelSftp; -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.JSchException; -import com.jcraft.jsch.Session; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; @@ -13,12 +9,12 @@ import org.apache.commons.pool2.BasePooledObjectFactory; import org.apache.commons.pool2.PooledObject; import org.apache.commons.pool2.impl.DefaultPooledObject; -import java.util.Properties; +import java.io.IOException; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class SftpFactory extends BasePooledObjectFactory { +public class SftpFactory extends BasePooledObjectFactory { private SftpProperties ossConfig; @@ -27,37 +23,7 @@ public class SftpFactory extends BasePooledObjectFactory { } @Override - public ChannelSftp create() throws SftpPoolException { - try { - JSch jsch = new JSch(); - Session session = jsch.getSession(ossConfig.getUsername(), ossConfig.getHostname(), Integer.parseInt(ossConfig.getPort())); - // 设置密码 - if (ossConfig.getPassword() != null) { - session.setPassword(ossConfig.getPassword()); - } - // 设置密码 - if (ossConfig.getPassword() != null) { - session.setPassword(ossConfig.getPassword()); - } - // 为Session对象设置properties - Properties config = new Properties(); - config.put("StrictHostKeyChecking", "no"); - session.setConfig(config); - // 设置超时时间 - session.setTimeout(Integer.parseInt(ossConfig.getTimeout())); - // 建立链接 - session.connect(); - // 打开SFTP通道 - ChannelSftp channel = (ChannelSftp) session.openChannel("sftp"); - // 建立SFTP通道的连接 - channel.connect(); - return channel; - } catch (JSchException e) { - throw new SftpPoolException("获取ftp连接失败", e); - } - } - - public FTPClient createFtp() throws SftpPoolException{ + public FTPClient create() throws Exception{ FTPClient ftpClient = null; try { ftpClient = new FTPClient(); @@ -81,16 +47,21 @@ public class SftpFactory extends BasePooledObjectFactory { return ftpClient; } + @Override - public PooledObject wrap(ChannelSftp channelSftp) { + public PooledObject wrap(FTPClient channelSftp) { return new DefaultPooledObject<>(channelSftp); } // 销毁对象 @Override - public void destroyObject(PooledObject p) { - ChannelSftp channelSftp = p.getObject(); - channelSftp.disconnect(); + public void destroyObject(PooledObject p) { + FTPClient ftpClient = p.getObject(); + try { + ftpClient.disconnect(); + } catch (IOException e) { + log.error("登出ftp失败,请检查FTP相关配置信息是否正确!" + e); + } } } \ No newline at end of file diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPool.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPool.java index f14f3442..32f7e948 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPool.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpPool.java @@ -1,13 +1,13 @@ package com.dxhy.oss.utils; -import com.jcraft.jsch.ChannelSftp; import lombok.Data; +import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.pool2.impl.GenericObjectPool; @Data public class SftpPool { - private GenericObjectPool pool; + private GenericObjectPool pool; public SftpPool(SftpFactory factory) { this.pool = new GenericObjectPool<>(factory, factory.getOssConfig().getPool()); @@ -18,7 +18,7 @@ public class SftpPool { * * @return sftp连接对象 */ - public ChannelSftp borrowObject() throws SftpPoolException { + public FTPClient borrowObject() throws SftpPoolException { try { return pool.borrowObject(); } catch (Exception e) { @@ -30,11 +30,11 @@ public class SftpPool { /** * 归还一个sftp连接对象 * - * @param channelSftp sftp连接对象 + * @param ftpClient sftp连接对象 */ - public void returnObject(ChannelSftp channelSftp) { - if (channelSftp != null) { - pool.returnObject(channelSftp); + public void returnObject(FTPClient ftpClient) { + if (ftpClient != null) { + pool.returnObject(ftpClient); } } diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java index 3ad51d4a..912e9296 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java @@ -2,6 +2,7 @@ package com.dxhy.oss.utils; import com.jcraft.jsch.ChannelSftp; import lombok.Data; +import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -10,13 +11,13 @@ import org.springframework.boot.context.properties.ConfigurationProperties; public class SftpProperties { private String hostname; - private String port = "22"; + private String port; private String username; private String password; private String timeout; private Pool pool = new Pool(); - public static class Pool extends GenericObjectPoolConfig { + public static class Pool extends GenericObjectPoolConfig { private int maxTotal = DEFAULT_MAX_TOTAL; private int maxIdle = DEFAULT_MAX_IDLE; From 97c9501dc0aaf0512b67d154f17257079ad74e55 Mon Sep 17 00:00:00 2001 From: gaorl Date: Sat, 3 Jun 2023 12:23:22 +0800 Subject: [PATCH 11/94] =?UTF-8?q?feature=EF=BC=9A=E6=B7=BB=E5=8A=A0ssh?= =?UTF-8?q?=E7=9A=84ftp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dxhy/oss/config/OssReturnConfig.java | 2 + .../java/com/dxhy/oss/service/FtpService.java | 7 +- .../java/com/dxhy/oss/service/SshService.java | 166 ++++++++++++++++++ .../oss/service/impl/FileServiceImpl.java | 57 +++++- .../java/com/dxhy/oss/utils/SshFactory.java | 70 ++++++++ .../main/java/com/dxhy/oss/utils/SshPool.java | 41 +++++ .../com/dxhy/oss/utils/SshProperties.java | 61 +++++++ 7 files changed, 393 insertions(+), 11 deletions(-) create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/service/SshService.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/utils/SshFactory.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/utils/SshPool.java create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/utils/SshProperties.java diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java b/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java index 22140e07..37d075a0 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/config/OssReturnConfig.java @@ -17,6 +17,8 @@ public interface OssReturnConfig { String FTP = "FTP"; + String SSH = "SSH"; + String LOCAL = "LOCAL"; String TOS = "TOS"; diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java index 300ffd34..de591237 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java @@ -6,12 +6,14 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; +import org.springframework.stereotype.Service; import java.io.*; import java.util.ArrayList; import java.util.List; @Slf4j +@Service public class FtpService { private final SftpPool pool; @@ -50,9 +52,8 @@ public class FtpService { result =false; } finally { try { - if (ftpClient.isConnected()) { - ftpClient.disconnect(); - } + log.info("回收线程"); + pool.returnObject(ftpClient); if (null != inputStream) { inputStream.close(); } diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/SshService.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/SshService.java new file mode 100644 index 00000000..d1d63331 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/SshService.java @@ -0,0 +1,166 @@ +package com.dxhy.oss.service; + +import cn.hutool.core.io.FileUtil; +import com.dxhy.oss.utils.SshPool; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.SftpException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.InputStream; +import java.nio.file.Files; + +/** + * @author jiaohongyang + */ +@Slf4j +@Service +public class SshService { + + private final SshPool pool; + + public SshService(SshPool pool) { + this.pool = pool; + } + + /** + * 将输入流的数据上传到sftp作为文件。文件完整路径 = basePath+directory + * + * @param pathName ftp服务保存地址,完整路径 + * @param fileName 上传到ftp的文件名 + * @param originFileName 待上传文件的名称(绝对地址) + */ + + public boolean uploadFile(String pathName, String fileName, String originFileName) { + log.info("开始上传文件"); + ChannelSftp sftp = null; + InputStream inputStream; + try { + sftp = pool.borrowObject(); + try { + sftp.cd(pathName); + } catch (SftpException e) { + // 目录不存在,则创建文件夹 + String[] dirs = pathName.split("/"); + String tempPath = ""; + for (String dir : dirs) { + if (null == dir || "".equals(dir)) { + continue; + } + tempPath += "/" + dir; + try { + sftp.cd(tempPath); + } catch (SftpException ex) { + try { + sftp.mkdir(tempPath); + sftp.cd(tempPath); + } catch (SftpException e1) { + e1.printStackTrace(); + } + } + } + } + + File orgFile = new File(originFileName); + inputStream = Files.newInputStream(orgFile.toPath()); + sftp.put(inputStream, fileName); + inputStream.close(); + // 删除本地文件,防止服务器空间不足 + FileUtil.del(orgFile); + log.info("上传文件成功"); + return true; + } catch (Exception e) { + e.printStackTrace(); + log.info("上传文件失败"); + return false; + } finally { + if (sftp != null) { + log.info("回收线程"); + pool.returnObject(sftp); + } + + } + } + + + public boolean downloadFile(String directory, String downloadFile, String saveFile) { + log.info("开始下载文件!"); + ChannelSftp sftp = null; + try { + sftp = pool.borrowObject(); + if (directory != null && !"".equals(directory)) { + sftp.cd(directory); + } + String file = saveFile + "/" + downloadFile; + File fileLocal = new File(file); + if (fileLocal.exists()) { + boolean delete = fileLocal.delete(); + log.info("删除本地路径文件:{}", delete); + } + this.directoryIsExists(saveFile); + sftp.get(downloadFile, file); + log.info("下载文件成功!"); + return true; + } catch (Exception e) { + e.printStackTrace(); + log.info("下载文件失败!"); + return false; + } finally { + if (sftp != null) { + log.info("回收线程"); + pool.returnObject(sftp); + } + + } + + + } + + + /** + * 删除文件 + * + * @param directory 要删除文件所在目录 + * @param deleteFile 要删除的文件 + * @return 返回是否删除成功 + */ + + public boolean deleteFile(String directory, String deleteFile) { + ChannelSftp sftp = null; + try { + sftp = pool.borrowObject(); + sftp.cd(directory); + sftp.rm(deleteFile); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + if (sftp != null) { + log.info("回收线程"); + pool.returnObject(sftp); + } + } + } + + + public void directoryIsExists(String path) { + File directory = new File(path); + if (directory.exists()) { + return; + } + + if (!directory.mkdir()) { + return; + } + + if (directory.canWrite()) { + return; + } + + boolean setWritable = directory.setWritable(true); + log.info("是否创建文件 directoryIsExists :{} ", setWritable); + + } +} diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java index 8f948867..fc6d6563 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java @@ -4,10 +4,7 @@ import cn.hutool.core.io.FileUtil; import com.dxhy.oss.config.OssConfig; import com.dxhy.oss.config.OssReturnConfig; import com.dxhy.oss.model.FileModel; -import com.dxhy.oss.service.AliOssService; -import com.dxhy.oss.service.FileService; -import com.dxhy.oss.service.FtpService; -import com.dxhy.oss.service.JdOssService; +import com.dxhy.oss.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -27,13 +24,15 @@ public class FileServiceImpl implements FileService { private final AliOssService aliOssService; private final JdOssService jdOssService; private final FtpService ftpService; + private final SshService sshService; @Autowired - public FileServiceImpl(OssConfig ossConfig, AliOssService aliOssService, JdOssService jdOssService, FtpService ftpService) { + public FileServiceImpl(OssConfig ossConfig, AliOssService aliOssService, JdOssService jdOssService, FtpService ftpService, SshService sshService) { this.ossConfig = ossConfig; this.aliOssService = aliOssService; this.jdOssService = jdOssService; this.ftpService = ftpService; + this.sshService = sshService; } /** @@ -60,7 +59,22 @@ public class FileServiceImpl implements FileService { } fileModel = jdOssService.uploadFile(fileName, originFileName); - } else if (OssReturnConfig.FTP.equals(ossConfig.getOssType())) { + } else if (OssReturnConfig.SSH.equals(ossConfig.getOssType())){ + if (!fileName.startsWith("/")) { + fileName = "/" + fileName; + } + String directory = fileName.substring(0, fileName.lastIndexOf("/")); + File directoryFile = new File(fileName); + String downloadFileName = directoryFile.getName(); + boolean b = sshService.uploadFile(directory, downloadFileName, originFileName); + fileModel = new FileModel(); + fileModel.setFilePath(fileName); + if (b) { + fileModel.setCode(OssReturnConfig.SUCCESS); + } else { + fileModel.setCode(OssReturnConfig.ERROR_09); + } + }else if (OssReturnConfig.FTP.equals(ossConfig.getOssType())) { if (!fileName.startsWith("/")) { fileName = "/" + fileName; } @@ -131,6 +145,12 @@ public class FileServiceImpl implements FileService { return fileModel; } + /** + * + * @param downloadFile 下载文件 服务器路径 + * @param saveFile 保存文件地址 本地路劲 + * @return + */ @Override public FileModel downFile(String downloadFile, String saveFile) { log.info("下载文件地址:{} , 本地存储文件地址:{}", downloadFile, saveFile); @@ -149,7 +169,18 @@ public class FileServiceImpl implements FileService { downloadFile = downloadFile.substring(1); } fileModel = jdOssService.downloadFile(downloadFile, saveFile); - } else if (OssReturnConfig.FTP.equals(ossConfig.getOssType())) { + } else if(OssReturnConfig.SSH.equals(ossConfig.getOssType())){ + String directory = downloadFile.substring(0, downloadFile.lastIndexOf("/")); + String downloadFileName = downloadFile.substring(downloadFile.lastIndexOf("/") + 1); + boolean b = sshService.downloadFile(directory, downloadFileName, path); + fileModel = new FileModel(); + fileModel.setFilePath(saveFile); + if (b) { + fileModel.setCode(OssReturnConfig.SUCCESS); + } else { + fileModel.setCode(OssReturnConfig.ERROR_09); + } + }else if (OssReturnConfig.FTP.equals(ossConfig.getOssType())) { String directory = downloadFile.substring(0, downloadFile.lastIndexOf("/")); File directoryFile = new File(downloadFile); String downloadFileName = directoryFile.getName(); @@ -234,7 +265,17 @@ public class FileServiceImpl implements FileService { path = path.substring(1); } fileModel = jdOssService.deleteFile(path); - } else if (OssReturnConfig.FTP.equals(ossConfig.getOssType())) { + } else if(OssReturnConfig.SSH.equals(ossConfig.getOssType())){ + File file = new File(path); + boolean b = sshService.deleteFile(file.getParent(), file.getName()); + if (b) { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.SUCCESS); + } else { + fileModel = new FileModel(); + fileModel.setCode(OssReturnConfig.ERROR_01); + } + }else if (OssReturnConfig.FTP.equals(ossConfig.getOssType())) { File file = new File(path); boolean b = ftpService.deleteFile(file.getParent(), file.getName()); if (b) { diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshFactory.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshFactory.java new file mode 100644 index 00000000..c3f157f3 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshFactory.java @@ -0,0 +1,70 @@ +package com.dxhy.oss.utils; + +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.pool2.BasePooledObjectFactory; +import org.apache.commons.pool2.PooledObject; +import org.apache.commons.pool2.impl.DefaultPooledObject; + +import java.util.Properties; + +@EqualsAndHashCode(callSuper = true) +@Data +@Slf4j +public class SshFactory extends BasePooledObjectFactory { + + private SshProperties ossConfig; + + public SshFactory(SshProperties ossConfig) { + this.ossConfig = ossConfig; + } + + @Override + public ChannelSftp create() throws SftpPoolException { + try { + JSch jsch = new JSch(); + Session session = jsch.getSession(ossConfig.getUsername(), ossConfig.getHostname(), Integer.parseInt(ossConfig.getPort())); + // 设置密码 + if (ossConfig.getPassword() != null) { + session.setPassword(ossConfig.getPassword()); + } + // 设置密码 + if (ossConfig.getPassword() != null) { + session.setPassword(ossConfig.getPassword()); + } + // 为Session对象设置properties + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + session.setConfig(config); + // 设置超时时间 + session.setTimeout(Integer.parseInt(ossConfig.getTimeout())); + // 建立链接 + session.connect(); + // 打开SFTP通道 + ChannelSftp channel = (ChannelSftp) session.openChannel("sftp"); + // 建立SFTP通道的连接 + channel.connect(); + return channel; + } catch (JSchException e) { + throw new SftpPoolException("获取ftp连接失败", e); + } + } + + @Override + public PooledObject wrap(ChannelSftp channelSftp) { + return new DefaultPooledObject<>(channelSftp); + } + + // 销毁对象 + @Override + public void destroyObject(PooledObject p) { + ChannelSftp channelSftp = p.getObject(); + channelSftp.disconnect(); + } + +} \ No newline at end of file diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshPool.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshPool.java new file mode 100644 index 00000000..9ce27258 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshPool.java @@ -0,0 +1,41 @@ +package com.dxhy.oss.utils; + +import com.jcraft.jsch.ChannelSftp; +import lombok.Data; +import org.apache.commons.pool2.impl.GenericObjectPool; + +@Data +public class SshPool { + + private GenericObjectPool pool; + + public SshPool(SshFactory factory) { + this.pool = new GenericObjectPool<>(factory, factory.getOssConfig().getPool()); + } + + /** + * 获取一个sftp连接对象 + * + * @return sftp连接对象 + */ + public ChannelSftp borrowObject() throws SftpPoolException { + try { + return pool.borrowObject(); + } catch (Exception e) { + e.printStackTrace(); + throw new SftpPoolException("获取ftp连接失败", e); + } + } + + /** + * 归还一个sftp连接对象 + * + * @param channelSftp sftp连接对象 + */ + public void returnObject(ChannelSftp channelSftp) { + if (channelSftp != null) { + pool.returnObject(channelSftp); + } + } + +} \ No newline at end of file diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshProperties.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshProperties.java new file mode 100644 index 00000000..2b82c304 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshProperties.java @@ -0,0 +1,61 @@ +package com.dxhy.oss.utils; + +import com.jcraft.jsch.ChannelSftp; +import lombok.Data; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Data +@ConfigurationProperties(prefix = "ftp.connection") +public class SshProperties { + + private String hostname; + private String port = "22"; + private String username; + private String password; + private String timeout; + private Pool pool = new Pool(); + + public static class Pool extends GenericObjectPoolConfig { + + private int maxTotal = DEFAULT_MAX_TOTAL; + private int maxIdle = DEFAULT_MAX_IDLE; + private int minIdle = DEFAULT_MIN_IDLE; + + public Pool() { + super(); + } + + @Override + public int getMaxTotal() { + return maxTotal; + } + + @Override + public void setMaxTotal(int maxTotal) { + this.maxTotal = maxTotal; + } + + @Override + public int getMaxIdle() { + return maxIdle; + } + + @Override + public void setMaxIdle(int maxIdle) { + this.maxIdle = maxIdle; + } + + @Override + public int getMinIdle() { + return minIdle; + } + + @Override + public void setMinIdle(int minIdle) { + this.minIdle = minIdle; + } + + } + +} \ No newline at end of file From 01be6f363041516bcd99f7965a938fb7f959b7a4 Mon Sep 17 00:00:00 2001 From: gaorl Date: Sat, 3 Jun 2023 15:44:47 +0800 Subject: [PATCH 12/94] =?UTF-8?q?feature=EF=BC=9AFTP=20=E4=BF=AE=E8=AE=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dxhy/oss/service/FtpService.java | 1 - .../java/com/dxhy/oss/service/SshService.java | 1 - .../java/com/dxhy/oss/utils/SftpConfig.java | 19 +++++++++++++++++++ .../com/dxhy/oss/utils/SftpProperties.java | 1 - 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java index de591237..2e842804 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/FtpService.java @@ -13,7 +13,6 @@ import java.util.ArrayList; import java.util.List; @Slf4j -@Service public class FtpService { private final SftpPool pool; diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/SshService.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/SshService.java index d1d63331..5f371227 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/service/SshService.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/SshService.java @@ -15,7 +15,6 @@ import java.nio.file.Files; * @author jiaohongyang */ @Slf4j -@Service public class SshService { private final SshPool pool; diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java index 9dba4130..c1cc0a18 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java @@ -1,6 +1,7 @@ package com.dxhy.oss.utils; import com.dxhy.oss.service.FtpService; +import com.dxhy.oss.service.SshService; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -28,4 +29,22 @@ public class SftpConfig { return new FtpService(sftpPool); } + // 工厂 + @Bean + public SshFactory sshFactory(SshProperties properties) { + return new SshFactory(properties); + } + + // 连接池 + @Bean + public SshPool sshPool(SshFactory sshFactory) { + return new SshPool(sshFactory); + } + + // 辅助类 + @Bean + public SshService sshService(SshPool sftpPool) { + return new SshService(sftpPool); + } + } \ No newline at end of file diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java index 912e9296..adafac69 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpProperties.java @@ -1,6 +1,5 @@ package com.dxhy.oss.utils; -import com.jcraft.jsch.ChannelSftp; import lombok.Data; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; From 22f7e8af9f238cf5a828d138dc30fa9e7b43109c Mon Sep 17 00:00:00 2001 From: gaorl Date: Sat, 3 Jun 2023 15:54:43 +0800 Subject: [PATCH 13/94] =?UTF-8?q?feature=EF=BC=9A=E4=BF=AE=E6=AD=A3ftp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dxhy/oss/utils/SftpConfig.java | 18 ----------- .../java/com/dxhy/oss/utils/SshConfig.java | 31 +++++++++++++++++++ 2 files changed, 31 insertions(+), 18 deletions(-) create mode 100644 dxhy-oss/src/main/java/com/dxhy/oss/utils/SshConfig.java diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java index c1cc0a18..603752ca 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SftpConfig.java @@ -29,22 +29,4 @@ public class SftpConfig { return new FtpService(sftpPool); } - // 工厂 - @Bean - public SshFactory sshFactory(SshProperties properties) { - return new SshFactory(properties); - } - - // 连接池 - @Bean - public SshPool sshPool(SshFactory sshFactory) { - return new SshPool(sshFactory); - } - - // 辅助类 - @Bean - public SshService sshService(SshPool sftpPool) { - return new SshService(sftpPool); - } - } \ No newline at end of file diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshConfig.java b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshConfig.java new file mode 100644 index 00000000..54be88b4 --- /dev/null +++ b/dxhy-oss/src/main/java/com/dxhy/oss/utils/SshConfig.java @@ -0,0 +1,31 @@ +package com.dxhy.oss.utils; + +import com.dxhy.oss.service.FtpService; +import com.dxhy.oss.service.SshService; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +// ftp配置 +@Configuration +@EnableConfigurationProperties(SshProperties.class) +public class SshConfig { + // 工厂 + @Bean + public SshFactory sshFactory(SshProperties properties) { + return new SshFactory(properties); + } + + // 连接池 + @Bean + public SshPool sshPool(SshFactory sshFactory) { + return new SshPool(sshFactory); + } + + // 辅助类 + @Bean + public SshService sshService(SshPool sftpPool) { + return new SshService(sftpPool); + } + +} \ No newline at end of file From 89204e2fda350f418cc53faf49d6d34b812728ed Mon Sep 17 00:00:00 2001 From: gaorl Date: Sat, 3 Jun 2023 16:42:56 +0800 Subject: [PATCH 14/94] =?UTF-8?q?feature=EF=BC=9AFTP=20=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/dxhy/oss/service/impl/FileServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java index fc6d6563..cca9c3b6 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java @@ -210,7 +210,7 @@ public class FileServiceImpl implements FileService { fos.flush(); b = true; } catch (IOException e) { - e.printStackTrace(); + log.error("本地导出异常:{}",e); }finally { try { if(fis != null){fis.close();} From 6ac8f7b71fa29592f0cf46b57abc4dd1b0d34e48 Mon Sep 17 00:00:00 2001 From: gaorl Date: Sat, 3 Jun 2023 16:54:50 +0800 Subject: [PATCH 15/94] =?UTF-8?q?feature=EF=BC=9Aftp=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/dxhy/oss/service/impl/FileServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java index cca9c3b6..81b3b839 100644 --- a/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java +++ b/dxhy-oss/src/main/java/com/dxhy/oss/service/impl/FileServiceImpl.java @@ -199,7 +199,7 @@ public class FileServiceImpl implements FileService { FileInputStream fis = null; FileOutputStream fos = null; try { - File download = new File(downloadFile.substring(0, downloadFile.lastIndexOf("/"))); + File download = new File(downloadFile); fis = new FileInputStream(download); fos = new FileOutputStream(file); //复制文件 From 4316a17ffe30365783dfb095c5ceca54fba0e018 Mon Sep 17 00:00:00 2001 From: yefei Date: Wed, 7 Jun 2023 09:34:51 +0800 Subject: [PATCH 16/94] =?UTF-8?q?ariesy=20=E5=A2=9E=E5=8A=A0=E7=A8=8E?= =?UTF-8?q?=E7=8E=87=E5=AD=97=E6=AE=B5,=E8=A1=A5=E5=85=85=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BaseInvoiceManualCheckServiceImpl.java | 4 ++ .../controller/SDNYMainProcessController.java | 13 +++++ .../com/dxhy/erp/dao/TdxRecordInvoiceDao.java | 4 ++ .../erp/service/SNPushCheckRecordService.java | 52 +++++++++++++++++++ .../service/impl/ReceiptOutServiceImpl.java | 2 +- .../resources/mapper/TdxRecordInvoiceDao.xml | 12 +++++ 6 files changed, 86 insertions(+), 1 deletion(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java b/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java index 953def8a..fd252a35 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java +++ b/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java @@ -106,7 +106,9 @@ public class BaseInvoiceManualCheckServiceImpl extends MpBaseServiceImpl hjList = super.baseMapper.selectHj(pramsMap); + log.info("手工认证 查询合计信息耗时:{}",System.currentTimeMillis()-start); BaseTDxRecordInvoice hjxx = hjList.get(0); hjsl = hjxx.getSfygx(); if (!"0".equals(hjsl)) { @@ -124,7 +126,9 @@ public class BaseInvoiceManualCheckServiceImpl extends MpBaseServiceImpl pageList = super.baseMapper.selectSggxcx(pramsMap); + log.info("手工认证 查询列表信息耗时:{}",System.currentTimeMillis()-start1); PageInfo pageInfo = new PageInfo<>(pageList); log.info("返回的列表为:{}",pageList); diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java index 5d092c32..886afd92 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java @@ -1253,4 +1253,17 @@ public class SDNYMainProcessController extends AbstractController { } return ZCYJG; } + + /** + * 查验发票 + */ + @PostMapping("/refresh") + @ResponseBody + @SysLog("发票查验") + public String refreshDetailData(@RequestBody Map pramsMap) throws Exception { + log.info("接口请求的参数为:{}",pramsMap); + String result = snPushCheckRecordService.getRecords(pramsMap); + return result; + } + } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/dao/TdxRecordInvoiceDao.java b/dxhy-erp/src/main/java/com/dxhy/erp/dao/TdxRecordInvoiceDao.java index 55649758..fb38105e 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/dao/TdxRecordInvoiceDao.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/dao/TdxRecordInvoiceDao.java @@ -185,4 +185,8 @@ public interface TdxRecordInvoiceDao extends BaseMapper { void saveInvoiceAccount(TdxInvoiceAccount invoice); void deleteByuuid(@Param("uuids") String[] uuids); + + List selectRecords(@Param("pramsMap") Map pramsMap); + + void updateTaxRate(@Param("pramsMap") Map pramsMap); } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java index 6b0cd5df..6b98d2f6 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java @@ -4,7 +4,9 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.dxhy.common.constant.DbConstant; import com.dxhy.common.datasource.config.DynamicContextHolder; import com.dxhy.common.enums.FplxEnum; @@ -40,6 +42,7 @@ import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; /** * 与山东能源交互数据主类 @@ -88,12 +91,18 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { @Resource private TDxInvoiceReimburseDao invoiceReimburseDao; + @Resource + private TdxRecordInvoiceDao tdxRecordInvoiceDao; + @Resource private BaseTDxRecordInvoiceDao baseTDxRecordInvoiceDao; @Resource private TDxInvoiceReimburseService tDxInvoiceReimburseService; + @Resource + private BaseTDxRecordInvoiceDetailDao baseTDxRecordInvoiceDetailDao; + @Resource private SysDeptDao sysDeptDao; @@ -270,6 +279,49 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { return queryInvoiceResult; } + public String getRecords(Map pramsMap) { + + QueryWrapper recordWrapper = new QueryWrapper<>(); + List uuids = tdxRecordInvoiceDao.selectRecords(pramsMap); + log.info("获取的uuid为{}",uuids); + + for (String uuid: uuids) { + boolean flag = false; + QueryWrapper detailWrapper = new QueryWrapper<>(); + detailWrapper.eq("uuid", uuid); + DynamicContextHolder.push("business" + DbConstant.DETAIL_READ); + List details = baseTDxRecordInvoiceDetailDao.selectList(detailWrapper); + DynamicContextHolder.push("business" + DbConstant.BUSINESS_READ); + + log.info("获取到的明细为:{}",details); + String taxRate = ""; + for(BaseTDxRecordInvoiceDetail detail : details){ + //获取明细信息 更新主表税率 + if(StringUtils.isNotEmpty(detail.getTaxRate())){ + if(flag){ + if(!taxRate.contains(detail.getTaxRate())) { + taxRate = taxRate + "," + detail.getTaxRate(); + } + }else{ + if(!taxRate.contains(detail.getTaxRate())) { + taxRate = taxRate + detail.getTaxRate(); + } + flag = true; + } + } + } + log.info("taxRate={}",taxRate); + + Map pramsUpdate = new HashMap<>(); + pramsUpdate.put("taxRate",taxRate); + pramsUpdate.put("uuid",uuid); + + tdxRecordInvoiceDao.updateTaxRate(pramsUpdate); + } + return "ok"; + } + + public JSONObject singleCheckInvoice(Map pramsMap) throws Exception { //1.封装查验参数 diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ReceiptOutServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ReceiptOutServiceImpl.java index 3db85952..c401c8c6 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ReceiptOutServiceImpl.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ReceiptOutServiceImpl.java @@ -71,7 +71,7 @@ public class ReceiptOutServiceImpl extends MpBaseServiceImpl condList = setPartInvoiceByType(invoices, condVO, userInfo); List outList = new ArrayList<>(); - // fourth:对比流水明细,区分底账表list中需要update或者insert的数据 + // fourth:对比流水明细,区分底账表list中需要update或者insert数据的 invoices.forEach(invoice -> { BaseTDxRecordInvoiceOut e = new BaseTDxRecordInvoiceOut(); if (outMap.containsKey(invoice.getUuid())) { diff --git a/dxhy-erp/src/main/resources/mapper/TdxRecordInvoiceDao.xml b/dxhy-erp/src/main/resources/mapper/TdxRecordInvoiceDao.xml index d1484bce..cc88bc9a 100644 --- a/dxhy-erp/src/main/resources/mapper/TdxRecordInvoiceDao.xml +++ b/dxhy-erp/src/main/resources/mapper/TdxRecordInvoiceDao.xml @@ -688,5 +688,17 @@ + + + + update t_dx_record_invoice + set tax_rate = #{taxRate} + where uuid = #{uuid} + + From c847b28f66959fa1f9c70d17f3e291f5761f811b Mon Sep 17 00:00:00 2001 From: yefei Date: Wed, 7 Jun 2023 09:38:10 +0800 Subject: [PATCH 17/94] =?UTF-8?q?ariesy=20=E5=A2=9E=E5=8A=A0=E8=80=97?= =?UTF-8?q?=E6=97=B6=E6=89=93=E5=8D=B0=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../invoicecheck/BaseInvoiceManualCheckServiceImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java b/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java index d327a680..133de029 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java +++ b/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java @@ -106,7 +106,9 @@ public class BaseInvoiceManualCheckServiceImpl extends MpBaseServiceImpl hjList = super.baseMapper.selectHj(pramsMap); + log.info("手工认证 查询统计信息耗时:{}",System.currentTimeMillis()-start); BaseTDxRecordInvoice hjxx = hjList.get(0); hjsl = hjxx.getSfygx(); if (!"0".equals(hjsl)) { @@ -124,7 +126,9 @@ public class BaseInvoiceManualCheckServiceImpl extends MpBaseServiceImpl pageList = super.baseMapper.selectSggxcx(pramsMap); + log.info("手工认证 查询列表信息耗时:{}",System.currentTimeMillis()-start1); PageInfo pageInfo = new PageInfo<>(pageList); log.info("返回的列表为:{}",pageList); From 275cb9066ef3241462e93badf260338255f35330 Mon Sep 17 00:00:00 2001 From: yefei Date: Wed, 7 Jun 2023 10:50:09 +0800 Subject: [PATCH 18/94] =?UTF-8?q?ariesy=20=E5=8E=BB=E6=8E=89order=20by?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml index cf4a629a..e477345d 100644 --- a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml +++ b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml @@ -223,7 +223,6 @@ - order by t.bzdh desc + - + update t_dx_record_invoice - set tax_rate = #{taxRate} - where uuid = #{uuid} + set tax_rate = #{pramsMap.taxRate} + where uuid = #{pramsMap.uuid} From b8524ad18eaa48c00af6e979030bc2dd5371040c Mon Sep 17 00:00:00 2001 From: yefei Date: Mon, 12 Jun 2023 15:29:03 +0800 Subject: [PATCH 30/94] =?UTF-8?q?ariesy=20=E8=A1=A5=E5=85=85=E4=B8=BB?= =?UTF-8?q?=E8=A1=A8=E7=A8=8E=E7=8E=87=E5=AD=97=E6=AE=B5=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/controller/SDNYMainProcessController.java | 2 +- .../java/com/dxhy/erp/dao/TdxRecordInvoiceDao.java | 2 +- .../dxhy/erp/service/SNPushCheckRecordService.java | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java index b490f750..e092e68d 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java @@ -1267,7 +1267,7 @@ public class SDNYMainProcessController extends AbstractController { @PostMapping("/refresh") @ResponseBody @SysLog("发票查验") - public String refreshDetailData(@RequestBody Map pramsMap) throws Exception { + public String refreshDetailData(@RequestBody Map pramsMap) throws Exception { log.info("接口请求的参数为:{}",pramsMap); String result = snPushCheckRecordService.getRecords(pramsMap); return result; diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/dao/TdxRecordInvoiceDao.java b/dxhy-erp/src/main/java/com/dxhy/erp/dao/TdxRecordInvoiceDao.java index ff548d55..953f3ec5 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/dao/TdxRecordInvoiceDao.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/dao/TdxRecordInvoiceDao.java @@ -186,7 +186,7 @@ public interface TdxRecordInvoiceDao extends BaseMapper { void deleteByuuid(@Param("uuids") String[] uuids); - List selectRecords(@Param("pramsMap") Map pramsMap); + List selectRecords(@Param("pramsMap") Map pramsMap); void updateTaxRate(@Param("pramsMap") Map pramsMap); } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java index 4bbe7bfc..2661ea5f 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java @@ -279,7 +279,7 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { return queryInvoiceResult; } - public String getRecords(Map pramsMap) { + public String getRecords(Map pramsMap) { DynamicContextHolder.push("business" + DbConstant.BUSINESS_WRITE); QueryWrapper recordWrapper = new QueryWrapper<>(); List uuids = tdxRecordInvoiceDao.selectRecords(pramsMap); @@ -310,12 +310,12 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { } } } - log.info("taxRate={}",taxRate); + log.info("获取的数据明细taxRate为={}",taxRate); + Map updateParam = new HashMap<>(); + updateParam.put("taxRate",taxRate); + updateParam.put("uuid",uuid); - pramsMap.put("taxRate",taxRate); - pramsMap.put("uuid",uuid); - - tdxRecordInvoiceDao.updateTaxRate(pramsMap); + tdxRecordInvoiceDao.updateTaxRate(updateParam); } return "ok"; } From 23978a490f660882d09e5d3ed238634d065a2e79 Mon Sep 17 00:00:00 2001 From: yefei Date: Mon, 12 Jun 2023 15:50:13 +0800 Subject: [PATCH 31/94] =?UTF-8?q?ariesy=20=E8=A1=A5=E5=85=85=E4=B8=BB?= =?UTF-8?q?=E8=A1=A8=E7=A8=8E=E7=8E=87=E5=AD=97=E6=AE=B5=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dxhy/erp/service/SNPushCheckRecordService.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java index 2661ea5f..5a7bb87e 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java @@ -311,11 +311,13 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { } } log.info("获取的数据明细taxRate为={}",taxRate); - Map updateParam = new HashMap<>(); - updateParam.put("taxRate",taxRate); - updateParam.put("uuid",uuid); + if(StringUtils.isNotEmpty(taxRate)) { + Map updateParam = new HashMap<>(); + updateParam.put("taxRate", taxRate); + updateParam.put("uuid", uuid); - tdxRecordInvoiceDao.updateTaxRate(updateParam); + tdxRecordInvoiceDao.updateTaxRate(updateParam); + } } return "ok"; } From 2385a6a798b08d634acf9ff5351bdd0ef435a12a Mon Sep 17 00:00:00 2001 From: yefei Date: Mon, 12 Jun 2023 16:13:49 +0800 Subject: [PATCH 32/94] =?UTF-8?q?ariesy=20=E8=A1=A5=E5=85=85=E4=B8=BB?= =?UTF-8?q?=E8=A1=A8=E7=A8=8E=E7=8E=87=E5=AD=97=E6=AE=B5=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dxhy/erp/service/SNPushCheckRecordService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java index 5a7bb87e..e8738b9d 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java @@ -284,9 +284,8 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { QueryWrapper recordWrapper = new QueryWrapper<>(); List uuids = tdxRecordInvoiceDao.selectRecords(pramsMap); log.info("获取的uuid为{}",uuids); - + boolean flag = false; for (String uuid: uuids) { - boolean flag = false; QueryWrapper detailWrapper = new QueryWrapper<>(); detailWrapper.eq("uuid", uuid); DynamicContextHolder.push("business" + DbConstant.DETAIL_READ); From 67d3ea8683cf8f3ab098a861ecf7928fb950f54e Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 13 Jun 2023 14:38:13 +0800 Subject: [PATCH 33/94] =?UTF-8?q?ariesy=20=E4=B8=BB=E8=A1=A8=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=A8=8E=E7=8E=87=E5=AD=97=E6=AE=B5=20v3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dxhy/erp/controller/SDNYMainProcessController.java | 1 + .../java/com/dxhy/erp/service/SNPushCheckRecordService.java | 3 ++- dxhy-erp/src/main/resources/mapper/TdxRecordInvoiceDao.xml | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java index e092e68d..da845da8 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java @@ -796,6 +796,7 @@ public class SDNYMainProcessController extends AbstractController { info.setZGFZH(snInvoice.getPurchaserBank()); info.setZBZ(snInvoice.getRemarks()); + List invoiceLineList = snInvoice.getInvoiceLineList(); List sapInvoiceDetailList = new ArrayList<>(); //查询明细 diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java index e8738b9d..5a7bb87e 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java @@ -284,8 +284,9 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { QueryWrapper recordWrapper = new QueryWrapper<>(); List uuids = tdxRecordInvoiceDao.selectRecords(pramsMap); log.info("获取的uuid为{}",uuids); - boolean flag = false; + for (String uuid: uuids) { + boolean flag = false; QueryWrapper detailWrapper = new QueryWrapper<>(); detailWrapper.eq("uuid", uuid); DynamicContextHolder.push("business" + DbConstant.DETAIL_READ); diff --git a/dxhy-erp/src/main/resources/mapper/TdxRecordInvoiceDao.xml b/dxhy-erp/src/main/resources/mapper/TdxRecordInvoiceDao.xml index 6684881f..480ed687 100644 --- a/dxhy-erp/src/main/resources/mapper/TdxRecordInvoiceDao.xml +++ b/dxhy-erp/src/main/resources/mapper/TdxRecordInvoiceDao.xml @@ -690,8 +690,8 @@ From 4553b9d0627782827c51eb6aaf95e8a71c756ce5 Mon Sep 17 00:00:00 2001 From: yefei Date: Wed, 14 Jun 2023 16:52:34 +0800 Subject: [PATCH 34/94] =?UTF-8?q?ariesy=20=E6=89=8B=E5=B7=A5=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E5=92=8C=E8=AE=A4=E8=AF=81=E6=9F=A5=E8=AF=A2=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E5=A2=9E=E5=8A=A0=E7=A8=8E=E7=8E=87=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/BaseSggxcxMapper.xml | 228 +++++++++--------- 1 file changed, 114 insertions(+), 114 deletions(-) diff --git a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml index 04c3f10e..2a096e5f 100644 --- a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml +++ b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml @@ -232,119 +232,119 @@ - order by t.bzdh desc - - - - + + + From a404e2711abf2ea59f6cd9f840a04152d411d18f Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 20 Jun 2023 17:28:40 +0800 Subject: [PATCH 40/94] =?UTF-8?q?arieay=20=E4=B8=80=E9=94=AE=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E5=A2=9E=E5=8A=A0=E7=A8=8E=E7=8E=87=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml b/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml index 9b7d3530..9eab9ca6 100644 --- a/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml +++ b/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml @@ -258,7 +258,7 @@ ,t.rzh_back_msg,t.in_account_status,t.payment_status,to_char(t.payment_date,'yyyy-mm-dd')payment_date from t_dx_record_invoice t WHERE to_char(t.invoice_date,'yyyy-mm-dd') between #{kpksrq} and #{kpjsrq} - and t.auth_status != '0' + and t.auth_status in ('2','3','4') and (t.invoice_type in('01','03','08','14','31','283','161','183','185') or (t.invoice_type ='32' and t.lq_tdyslxDm='08')) and t.bdk_status in ('1','2') and t.export_mark = '0' From 9f87e4d85c4e1fefb231d6293a9be39c75c8eb44 Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 20 Jun 2023 17:29:41 +0800 Subject: [PATCH 41/94] =?UTF-8?q?arieay=20=E4=B8=80=E9=94=AE=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E5=A2=9E=E5=8A=A0=E7=A8=8E=E7=8E=87=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml b/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml index 9eab9ca6..03b33092 100644 --- a/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml +++ b/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml @@ -77,7 +77,7 @@ and (t.invoice_type in('01','03','08','14','31','283','161','183','185') or (t.invoice_type ='32' and t.lq_tdyslxDm='08')) and t.bdk_status in ('1','2') and t.export_mark = '0' - and t.auth_status != '0' + and t.auth_status in ('2','3','4') and t.company = #{company} and t.gf_tax_no in From 4944e3b8d5443947309270e77553efd1af12c38c Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 20 Jun 2023 17:53:08 +0800 Subject: [PATCH 42/94] =?UTF-8?q?arieay=20=E4=B8=80=E9=94=AE=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E5=A2=9E=E5=8A=A0=E7=A8=8E=E7=8E=87=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml index e1d2d362..17b17940 100644 --- a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml +++ b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml @@ -1402,12 +1402,12 @@ and t.ele_invoice_no = #{eleInvoiceNo} - + and t.tax_rate = #{taxRate} - - and t.tax_rate like '%,%' - + + + + select t1.*,(select t2.name from sys_dept t2 where t2.dept_id=t1.parent_id)parentName from sys_dept t1 + where (t1.org_type != '8' and t1.org_type != '9') + + and t1.company = #{company} + + + + + + + + + + + + + + + update + sys_dept + set qs_status = #{qsStatus}, + db_name = #{dbName}, + ace_key = #{aceKey}, + ace_id = #{aceId}, + is_collext = #{isCollext} + where company = #{company} + and org_type != '1' + + + + + + + + + + + + From a0dec2d8fefc119b7f7854c9d3fc716b51b6becf Mon Sep 17 00:00:00 2001 From: yishiqihuasheng <1191093413@qq.com> Date: Fri, 30 Jun 2023 16:05:05 +0800 Subject: [PATCH 50/94] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=B1=BB=E4=BC=BCsap?= =?UTF-8?q?=E6=8E=A8=E9=80=810.015=E6=88=900.1=E5=92=8C1.5=E6=88=90150?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BaseFpdrrzServiceImpl.java | 2 +- .../controller/SDNYMainProcessController.java | 40 +++++++++++++------ 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/service/tdxrecordinvoice/BaseFpdrrzServiceImpl.java b/dxhy-base/src/main/java/com/dxhy/base/service/tdxrecordinvoice/BaseFpdrrzServiceImpl.java index 5b7f9c5f..6df45393 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/service/tdxrecordinvoice/BaseFpdrrzServiceImpl.java +++ b/dxhy-base/src/main/java/com/dxhy/base/service/tdxrecordinvoice/BaseFpdrrzServiceImpl.java @@ -146,7 +146,7 @@ public class BaseFpdrrzServiceImpl extends MpBaseServiceImpl queryRecord = new QueryWrapper<>(); queryRecord.eq("uuid", uuid); BaseTDxRecordInvoice rdxRecordInvoice = baseTDxRecordInvoiceDao.selectOne(queryRecord); - if (StringHelper.isNotBlank(rdxRecordInvoice.getDkTaxAmount().toPlainString())){ + if (rdxRecordInvoice.getDkTaxAmount() != null && StringUtils.isNotBlank(rdxRecordInvoice.getDkTaxAmount().toPlainString())){ rzlb.setDkse(rdxRecordInvoice.getDkTaxAmount().toPlainString()); } if (rdxRecordInvoice != null) { diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java index a954c619..de8d48e4 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java @@ -831,22 +831,32 @@ public class SDNYMainProcessController extends AbstractController { sapInvoiceDetail.setZTAX(snInvoiceDetail.getTaxRate()); if ("0".equals(snInvoiceDetail.getTaxRate())) { sapInvoiceDetail.setZTAX("0.00"); -// sapInvoiceDetail.setZSM(sapInvoiceDetail.getZTAX()); + sapInvoiceDetail.setZSM(sapInvoiceDetail.getZTAX()); } if (snInvoiceDetail.getTaxRate().contains(".")) { String getTaxRate = snInvoiceDetail.getTaxRate(); - if (snInvoiceDetail.getTaxRate().length() > 4) { - getTaxRate = getTaxRate.substring(0, 4); - } +// if (snInvoiceDetail.getTaxRate().length() > 4) { +// getTaxRate = getTaxRate.substring(0, 4); +// } BigDecimal tax = new BigDecimal(getTaxRate); sapInvoiceDetail.setZSM(getZSM(tax.toString())); BigDecimal tax1 = tax.multiply(new BigDecimal("100")); sapInvoiceDetail.setZTAX(tax1.toString()); + if (tax1.toPlainString().indexOf(".")>=3) { + sapInvoiceDetail.setZTAX(snInvoiceDetail.getTaxRate()); + }else if (tax1.toPlainString().length()-tax1.toPlainString().indexOf(".")>3){ + String substring = tax1.toPlainString().substring(0, tax1.toPlainString().indexOf(".") + 3); + sapInvoiceDetail.setZTAX(substring); + } + } if (snInvoiceDetail.getTaxRate().contains("%") && !snInvoiceDetail.getTaxRate().contains(".")) { String replace = snInvoiceDetail.getTaxRate().replace("%", ".00"); + String replaceZsm = snInvoiceDetail.getTaxRate().replace("%",""); + sapInvoiceDetail.setZSM(getZSM(replaceZsm)); sapInvoiceDetail.setZTAX(replace); } + } // if (invoiceLineList.size() == 1 && snInvoice.getTaxRate() == null) { // info.setZTAX(sapInvoiceDetail.getZTAX()); @@ -872,15 +882,16 @@ public class SDNYMainProcessController extends AbstractController { } } sapInvoiceDetail.setZSL(snInvoiceDetail.getQuantity()); - String zsmTax = snInvoiceDetail.getTaxRate(); - if (zsmTax != null && zsmTax != "" && zsmTax.length() > 4) { - zsmTax = zsmTax.substring(0, 4); - } - if (zsmTax != null && zsmTax.contains("%") && !zsmTax.contains(".")) { - zsmTax = (new BigDecimal(zsmTax.replace("%", ""))).divide(new BigDecimal("100")).toString(); - } -// sapInvoiceDetail.setZSM(getZSM(snInvoiceDetail.getTaxRate())); - sapInvoiceDetail.setZSM(getZSM(zsmTax)); + +// String zsmTax = snInvoiceDetail.getTaxRate(); +// if (zsmTax != null && zsmTax != "" && zsmTax.length() > 4) { +// zsmTax = zsmTax.substring(0, 4); +// } +// if (zsmTax != null && zsmTax.contains("%") && !zsmTax.contains(".")) { +// zsmTax = (new BigDecimal(zsmTax.replace("%", ""))).divide(new BigDecimal("100")).toString(); +// } +//// sapInvoiceDetail.setZSM(getZSM(snInvoiceDetail.getTaxRate())); +// sapInvoiceDetail.setZSM(getZSM(zsmTax)); sapInvoiceDetail.setZGGXH(snInvoiceDetail.getSpecificationModel()); if (snInvoice.getInvoiceCode() != null) { sapInvoiceDetail.setZTID(snInvoice.getInvoiceCode() + snInvoice.getInvoiceNumber() + snFplx); @@ -1187,6 +1198,9 @@ public class SDNYMainProcessController extends AbstractController { case "1.5": sm = "JA"; break; + case "0.015": + sm = "JA"; + break; case "1": sm = "J9"; break; From 2252f1cd3d78facb4cb07c9815176dcf64fa60bf Mon Sep 17 00:00:00 2001 From: yefei Date: Mon, 3 Jul 2023 09:29:31 +0800 Subject: [PATCH 51/94] =?UTF-8?q?ariesy=20=E5=A2=9E=E5=8A=A0=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BaseInvoiceController.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java index 0f8a2c32..ad94ed47 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java +++ b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java @@ -198,20 +198,7 @@ public class BaseInvoiceController extends AbstractController { if (!StringUtils.isNotBlank(gfsh)){ pramsMap.put("sign","88"); } - List gfshList = new ArrayList<>(); - if (!"99".equals(gfsh) && StringUtils.isNotBlank(gfsh)) { - gfshList.add(gfsh); - } else { - gfshList = UserInfoUtil.getGfshAll(getUserInfo().getOrg()); - } - pramsMap.put("gfsh", gfshList); - boolean flag = checkList(gfshList); - - if (flag){ - pramsMap.put("sign","88"); - log.info("登陆账号无税号"); - } //所属组织 // List companyCodeList = new ArrayList<>(); // if (StringUtils.isNotBlank(companyCode)){ @@ -227,6 +214,24 @@ public class BaseInvoiceController extends AbstractController { pramsMap.put("companyCode",companyCode); } + //判断购方税号 + List gfshList = new ArrayList<>(); + if (!"99".equals(gfsh) && StringUtils.isNotBlank(gfsh)) { + gfshList.add(gfsh); + } else { +// gfshList = UserInfoUtil.getGfshAll(getUserInfo().getOrg()); + gfshList = getGfshList(gfshList,getUserInfo().getCompanyCodes()); + } + pramsMap.put("gfsh", gfshList); + + boolean flag = checkList(gfshList); + + if (flag){ + pramsMap.put("sign","88"); + log.info("登陆账号无税号"); + } + + if (StringUtils.isNotBlank(taxRate) && !"99".equals(taxRate)){ // List rates = new ArrayList<>(); // rates = convertRates(taxRate,rates); From 030d70e09282a92595d562d777345b2f6d3d05d5 Mon Sep 17 00:00:00 2001 From: yefei Date: Mon, 3 Jul 2023 09:48:32 +0800 Subject: [PATCH 52/94] =?UTF-8?q?ariesy=20=E5=A2=9E=E5=8A=A0=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dxhy/sign/dao/SysDeptDao.java | 86 ++++++++++++++++ .../com/dxhy/sign/entity/SysDeptEntity.java | 31 +++++- .../src/main/resources/mapper/SysDeptDao.xml | 97 +++++++++++++++++++ 3 files changed, 209 insertions(+), 5 deletions(-) create mode 100644 dxhy-sign/src/main/resources/mapper/SysDeptDao.xml diff --git a/dxhy-sign/src/main/java/com/dxhy/sign/dao/SysDeptDao.java b/dxhy-sign/src/main/java/com/dxhy/sign/dao/SysDeptDao.java index 48ea682d..62ab0fb0 100644 --- a/dxhy-sign/src/main/java/com/dxhy/sign/dao/SysDeptDao.java +++ b/dxhy-sign/src/main/java/com/dxhy/sign/dao/SysDeptDao.java @@ -3,6 +3,9 @@ package com.dxhy.sign.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dxhy.sign.entity.SysDeptEntity; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 部门管理 @@ -11,5 +14,88 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface SysDeptDao extends BaseMapper { + /** + * 根据集团编码查询税号 + * + * @author 陈刚扬 + * @date 2020/12/4 + * @param company + * @param orgType + * @return java.util.List + */ + List selectDeptByCompany(@Param("company") String company, @Param("orgType") String orgType); + + /** + * 根据集团编码查询部门信息 + * + * @param company + * 集团编码 + * @return 部门信息 + */ + List queryList(@Param("company") String company); + + /** + * 根据集团编码查询用户关联部门信息 + * + * @param company + * 集团编码 + * @return 部门信息 + */ + List queryListUser(@Param("company") String company); + + /** + * 根据集团编码查询上级部门信息 + * + * @param company + * 集团编码 + * @return 部门信息 + */ + List queryListParent(@Param("company") String company); + + /** + * 查询子部门ID列表 + * + * @param parentId + * 上级部门ID + * @return 部门信息 + */ + List queryDetpIdList(@Param("parentId") Long parentId); + + /** + * 根据上级ID查询部门信息 + * + * @param parentId + * 集团编码 + * @return 部门信息 + */ + List queryDeptParentId(@Param("parentId") Long parentId); + + /** + * 获取部门信息 + * + * @return 部门信息 + */ + List queryDeptList(); + + /** + * 根据集团编码修改部分信息 + * + * @param company + * 集团编码 + * @param isCollext + * 是否采集 + * @param aceKey + * key + * @param aceId + * id + * @param dbName + * 数据库 + * @param qsStatus + * 签收状态 + */ + void updateDeptCompany(@Param("company") String company, @Param("isCollext") String isCollext, + @Param("aceKey") String aceKey, @Param("aceId") String aceId, @Param("dbName") String dbName, + @Param("qsStatus") String qsStatus); + List getOrgCodeList(Long userId); } diff --git a/dxhy-sign/src/main/java/com/dxhy/sign/entity/SysDeptEntity.java b/dxhy-sign/src/main/java/com/dxhy/sign/entity/SysDeptEntity.java index 30e357cb..9f318c0a 100644 --- a/dxhy-sign/src/main/java/com/dxhy/sign/entity/SysDeptEntity.java +++ b/dxhy-sign/src/main/java/com/dxhy/sign/entity/SysDeptEntity.java @@ -1,29 +1,42 @@ package com.dxhy.sign.entity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; + import java.io.Serializable; import java.util.Date; +import java.util.List; /** + * 部门管理 + * * @author jiaohongyang - * @date 2019年3月26日 下午6:02:48 */ @Data @TableName("sys_dept") public class SysDeptEntity implements Serializable { + private static final long serialVersionUID = 1L; - private String password; - - private Long deptId; + /** + * 部门ID + */ + @TableId + private String deptId; /** * 上级部门ID,一级部门为0 */ - private Long parentId; + private String parentId; /** * 部门名称 */ private String name; + /** + * 上级部门名称 + */ + @TableField(exist = false) + private String parentName; private Integer orderNum; private String taxno; @@ -79,10 +92,18 @@ public class SysDeptEntity implements Serializable { * 是否需要确认密码 */ private String isPassword; + /** + * 确认密码 + */ + private String password; private Date updateTime; private Date createTime; + private String autoRz; + private String productType; + @TableField(exist = false) + private List children; } diff --git a/dxhy-sign/src/main/resources/mapper/SysDeptDao.xml b/dxhy-sign/src/main/resources/mapper/SysDeptDao.xml new file mode 100644 index 00000000..e532ed2b --- /dev/null +++ b/dxhy-sign/src/main/resources/mapper/SysDeptDao.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + update + sys_dept + set qs_status = #{qsStatus}, + db_name = #{dbName}, + ace_key = #{aceKey}, + ace_id = #{aceId}, + is_collext = #{isCollext} + where company = #{company} + and org_type != '1' + + + + + + + + + + + + From 9a2aa362e2b9263d35aeee4c1bada2397c55247f Mon Sep 17 00:00:00 2001 From: yefei Date: Mon, 3 Jul 2023 10:07:29 +0800 Subject: [PATCH 53/94] =?UTF-8?q?ariesy=20=E4=BF=AE=E6=94=B9=E5=86=B2?= =?UTF-8?q?=E7=AA=81bean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/{SysDeptDao.java => SysDeptAuthDao.java} | 2 +- .../BaseInvoiceManualCheckServiceImpl.java | 12 +++++++----- .../mapper/{SysDeptDao.xml => SysDeptAuthDao.xml} | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) rename dxhy-base/src/main/java/com/dxhy/base/dao/{SysDeptDao.java => SysDeptAuthDao.java} (97%) rename dxhy-base/src/main/resources/mapper/{SysDeptDao.xml => SysDeptAuthDao.xml} (98%) diff --git a/dxhy-base/src/main/java/com/dxhy/base/dao/SysDeptDao.java b/dxhy-base/src/main/java/com/dxhy/base/dao/SysDeptAuthDao.java similarity index 97% rename from dxhy-base/src/main/java/com/dxhy/base/dao/SysDeptDao.java rename to dxhy-base/src/main/java/com/dxhy/base/dao/SysDeptAuthDao.java index afb546ed..c53a2d1a 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/dao/SysDeptDao.java +++ b/dxhy-base/src/main/java/com/dxhy/base/dao/SysDeptAuthDao.java @@ -13,7 +13,7 @@ import java.util.List; * @author jiaohongyang */ @Mapper -public interface SysDeptDao extends BaseMapper { +public interface SysDeptAuthDao extends BaseMapper { /** * 根据集团编码查询税号 * diff --git a/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java b/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java index 3174ef5b..5b4ee606 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java +++ b/dxhy-base/src/main/java/com/dxhy/base/service/invoicecheck/BaseInvoiceManualCheckServiceImpl.java @@ -9,7 +9,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import com.dxhy.base.dao.SysDeptDao; +import com.dxhy.base.dao.SysDeptAuthDao; import com.dxhy.base.entity.SysDeptEntity; import com.dxhy.common.constant.DictConstant; import lombok.extern.slf4j.Slf4j; @@ -56,7 +56,7 @@ public class BaseInvoiceManualCheckServiceImpl extends MpBaseServiceImpl getGfshList(List gfshList, List companyCodes) { DynamicContextHolder.push(DbConstant.BASICS_READ); - List taxnoList = sysDeptDao.queryTaxnoList(); - List parentIdList = sysDeptDao.queryParentIdList(); + List taxnoList = sysDeptAuthDao.queryTaxnoList(); + List parentIdList = sysDeptAuthDao.queryParentIdList(); Map taxnoMap = taxnoList.stream().collect(Collectors.toMap(SysDeptEntity::getDeptId, SysDeptEntity::getTaxno)); Map parentIdMap = parentIdList.stream().collect(Collectors.toMap(SysDeptEntity::getDeptId, SysDeptEntity::getParentId)); + log.info("taxnoMap={},parentIdMap={}",taxnoMap,parentIdMap); + String gfsh = ""; for(String companyCode : companyCodes){ QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("org_code",companyCode); - SysDeptEntity sysDeptEntity = sysDeptDao.selectOne(wrapper); + SysDeptEntity sysDeptEntity = sysDeptAuthDao.selectOne(wrapper); String dId = sysDeptEntity.getDeptId(); gfsh = getGfsh(dId,taxnoMap,parentIdMap); diff --git a/dxhy-base/src/main/resources/mapper/SysDeptDao.xml b/dxhy-base/src/main/resources/mapper/SysDeptAuthDao.xml similarity index 98% rename from dxhy-base/src/main/resources/mapper/SysDeptDao.xml rename to dxhy-base/src/main/resources/mapper/SysDeptAuthDao.xml index d06d0653..cb6c323c 100644 --- a/dxhy-base/src/main/resources/mapper/SysDeptDao.xml +++ b/dxhy-base/src/main/resources/mapper/SysDeptAuthDao.xml @@ -1,7 +1,7 @@ - + From 30d5c555153cf7caa17036a7484adce35ce642bf Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 4 Jul 2023 17:23:50 +0800 Subject: [PATCH 89/94] =?UTF-8?q?ariesy=20=E5=A2=9E=E5=8A=A0=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/BaseSggxcxMapper.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml index e326949e..112184ba 100644 --- a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml +++ b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml @@ -232,22 +232,22 @@ and t.tax_rate like '%,%' - + order by t.sn_voucher_number - + order by t.sn_voucher_number desc - + order by t.bzdh - + order by t.bzdh desc - + order by t.invoice_date - + order by t.invoice_date desc From da48282e5fbc4048b3d583b58c35f85f817371d1 Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 4 Jul 2023 17:35:29 +0800 Subject: [PATCH 90/94] =?UTF-8?q?ariesy=20=E5=A2=9E=E5=8A=A0=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dxhy/base/controller/BaseInvoiceController.java | 6 ++++++ .../src/main/resources/mapper/BaseSggxcxMapper.xml | 12 ++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java index 8ffaa74b..bd6e48f6 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java +++ b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java @@ -518,6 +518,9 @@ public class BaseInvoiceController extends AbstractController { String suspendStatus = (String) map.get("suspendStastus"); String suspendDate = (String) map.get("suspendDate"); String bzr = (String) map.get("bzr"); + String sortPzbh = String.valueOf(map.get("sortPzbh")); + String sortBzdh = String.valueOf(map.get("sortBzdh")); + String sortKprq = String.valueOf(map.get("sortKprq")); String taxRate = String.valueOf(map.get("taxRate")); if (StringUtils.isNotEmpty(suspendDate) && suspendDate.length() >7){ suspendDate = suspendDate.substring(0,7); @@ -560,6 +563,9 @@ public class BaseInvoiceController extends AbstractController { pramsMap.put("imageNumber", map.get("imageNumber")); pramsMap.put("suspendStatus",suspendStatus); pramsMap.put("suspendDate",suspendDate); + pramsMap.put("sortPzbh",sortPzbh); + pramsMap.put("sortBzdh",sortBzdh); + pramsMap.put("sortKprq",sortKprq); pramsMap.put("bzr",bzr); if (map.get("accountPeriod") != null && !"".equals(map.get("accountPeriod"))) { String accountPeriod = map.get("accountPeriod").toString().substring(0,7); diff --git a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml index 112184ba..bfff6b16 100644 --- a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml +++ b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml @@ -232,22 +232,22 @@ and t.tax_rate like '%,%' - + order by t.sn_voucher_number - + order by t.sn_voucher_number desc - + order by t.bzdh - + order by t.bzdh desc - + order by t.invoice_date - + order by t.invoice_date desc From 2befdbae70586aef9cc5924603cd9578f9bf79af Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 4 Jul 2023 18:13:45 +0800 Subject: [PATCH 91/94] =?UTF-8?q?ariesy=20=E5=A2=9E=E5=8A=A0=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BaseInvoiceController.java | 12 +++++++++--- .../main/resources/mapper/BaseFpZhMapper.xml | 6 +++--- .../resources/mapper/BaseSggxcxMapper.xml | 19 ++++++++++--------- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java index bd6e48f6..8389c022 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java +++ b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java @@ -172,9 +172,15 @@ public class BaseInvoiceController extends AbstractController { pramsMap.put("snVoucherNumber", map.get("snVoucherNumber")); pramsMap.put("company", map.get("company")); pramsMap.put("menuId", map.get("menuId")); - pramsMap.put("sortPzbh",sortPzbh); - pramsMap.put("sortBzdh",sortBzdh); - pramsMap.put("sortKprq",sortKprq); + if(StringUtils.isNotEmpty(sortPzbh)) { + pramsMap.put("sortPzbh", sortPzbh); + } + if(StringUtils.isNotEmpty(sortBzdh)) { + pramsMap.put("sortBzdh", sortBzdh); + } + if(StringUtils.isNotEmpty(sortKprq)) { + pramsMap.put("sortKprq", sortKprq); + } pramsMap.put("xfmc", xfmc); pramsMap.put("qsr", qsr); if (StringUtils.isNotBlank(rzhr)) { diff --git a/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml b/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml index 1ec579eb..374fb859 100644 --- a/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml +++ b/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml @@ -244,19 +244,19 @@ order by t.sn_voucher_number - + order by t.sn_voucher_number desc order by t.bzdh - + order by t.bzdh desc order by t.invoice_date - + order by t.invoice_date desc diff --git a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml index bfff6b16..4a35035a 100644 --- a/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml +++ b/dxhy-base/src/main/resources/mapper/BaseSggxcxMapper.xml @@ -94,6 +94,12 @@ c.select_end_date or d.tj_status in ('1','2')) + + and t.bzdh = #{bzdh} + + + and t.bzdh is not null + and t.gf_tax_no in @@ -133,12 +139,7 @@ and t.qs_status = #{qszt} - - and t.bzdh = #{bzdh} - - - and t.bzdh is not null - + and t.inaccount_status = #{inAccountStatus} @@ -235,19 +236,19 @@ order by t.sn_voucher_number - + order by t.sn_voucher_number desc order by t.bzdh - + order by t.bzdh desc order by t.invoice_date - + order by t.invoice_date desc From 522a475627f97911deb6f4a7dc85dedd13b5888c Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 4 Jul 2023 18:17:09 +0800 Subject: [PATCH 92/94] =?UTF-8?q?ariesy=20=E5=A2=9E=E5=8A=A0=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E5=8F=82=E6=95=B0=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BaseInvoiceController.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java index 8ffaa74b..0dacf005 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java +++ b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java @@ -172,9 +172,15 @@ public class BaseInvoiceController extends AbstractController { pramsMap.put("snVoucherNumber", map.get("snVoucherNumber")); pramsMap.put("company", map.get("company")); pramsMap.put("menuId", map.get("menuId")); - pramsMap.put("sortPzbh",sortPzbh); - pramsMap.put("sortBzdh",sortBzdh); - pramsMap.put("sortKprq",sortKprq); + if(StringUtils.isNotEmpty(sortPzbh)) { + pramsMap.put("sortPzbh", sortPzbh); + } + if(StringUtils.isNotEmpty(sortBzdh)) { + pramsMap.put("sortBzdh", sortBzdh); + } + if(StringUtils.isNotEmpty(sortKprq)) { + pramsMap.put("sortKprq", sortKprq); + } pramsMap.put("xfmc", xfmc); pramsMap.put("qsr", qsr); if (StringUtils.isNotBlank(rzhr)) { @@ -504,6 +510,9 @@ public class BaseInvoiceController extends AbstractController { String qsksrq = (String)map.get("qsksrq"); String qsjsrq = (String)map.get("qsjsrq"); String xfmc = (String)map.get("xfmc"); + String sortPzbh = String.valueOf(map.get("sortPzbh")); + String sortBzdh = String.valueOf(map.get("sortBzdh")); + String sortKprq = String.valueOf(map.get("sortKprq")); String position = (String)map.get("position"); String fpzt = (String)map.get("invoiceStatus"); String sfkrz = (String)map.get("sfkrz"); @@ -561,6 +570,16 @@ public class BaseInvoiceController extends AbstractController { pramsMap.put("suspendStatus",suspendStatus); pramsMap.put("suspendDate",suspendDate); pramsMap.put("bzr",bzr); + if(StringUtils.isNotEmpty(sortPzbh)) { + pramsMap.put("sortPzbh", sortPzbh); + } + if(StringUtils.isNotEmpty(sortBzdh)) { + pramsMap.put("sortBzdh", sortBzdh); + } + if(StringUtils.isNotEmpty(sortKprq)) { + pramsMap.put("sortKprq", sortKprq); + } + if (map.get("accountPeriod") != null && !"".equals(map.get("accountPeriod"))) { String accountPeriod = map.get("accountPeriod").toString().substring(0,7); pramsMap.put("accountPeriod", accountPeriod); From eb11c9414fb93cf6c3ff731bdfef772ddd11af5f Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 4 Jul 2023 18:18:18 +0800 Subject: [PATCH 93/94] =?UTF-8?q?ariesy=20=E5=A2=9E=E5=8A=A0=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E5=8F=82=E6=95=B0=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dxhy/base/controller/BaseInvoiceController.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java index d0e4dd26..47e4e14c 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java +++ b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java @@ -527,9 +527,6 @@ public class BaseInvoiceController extends AbstractController { String suspendStatus = (String) map.get("suspendStastus"); String suspendDate = (String) map.get("suspendDate"); String bzr = (String) map.get("bzr"); - String sortPzbh = String.valueOf(map.get("sortPzbh")); - String sortBzdh = String.valueOf(map.get("sortBzdh")); - String sortKprq = String.valueOf(map.get("sortKprq")); String taxRate = String.valueOf(map.get("taxRate")); if (StringUtils.isNotEmpty(suspendDate) && suspendDate.length() >7){ suspendDate = suspendDate.substring(0,7); From 6432870ca83c9963121f725ab6a9f4120debfac0 Mon Sep 17 00:00:00 2001 From: yefei Date: Tue, 4 Jul 2023 18:42:04 +0800 Subject: [PATCH 94/94] =?UTF-8?q?ariesy=20=E5=A2=9E=E5=8A=A0=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E5=8F=82=E6=95=B0=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BaseInvoiceController.java | 24 ++++++------ .../main/resources/mapper/BaseFpZhMapper.xml | 37 ++++++++++--------- .../resources/mapper/BaseSggxcxMapper.xml | 25 +++++++------ 3 files changed, 44 insertions(+), 42 deletions(-) diff --git a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java index 47e4e14c..4237364a 100644 --- a/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java +++ b/dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java @@ -141,9 +141,9 @@ public class BaseInvoiceController extends AbstractController { String businessCode = (String)map.get("businessCode"); String qsr = (String)map.get("qsr"); String rzhr = (String)map.get("rzhr"); - String sortPzbh = String.valueOf(map.get("sortPzbh")); - String sortBzdh = String.valueOf(map.get("sortBzdh")); - String sortKprq = String.valueOf(map.get("sortKprq")); +// String sortPzbh = String.valueOf(map.get("sortPzbh")); +// String sortBzdh = String.valueOf(map.get("sortBzdh")); +// String sortKprq = String.valueOf(map.get("sortKprq")); String taxRate = String.valueOf(map.get("taxRate")); log.info("taxRate={}",taxRate); String inAccountStatus = (String)map.get("inAccountStatus"); @@ -172,15 +172,15 @@ public class BaseInvoiceController extends AbstractController { pramsMap.put("snVoucherNumber", map.get("snVoucherNumber")); pramsMap.put("company", map.get("company")); pramsMap.put("menuId", map.get("menuId")); - if(StringUtils.isNotEmpty(sortPzbh)) { - pramsMap.put("sortPzbh", sortPzbh); - } - if(StringUtils.isNotEmpty(sortBzdh)) { - pramsMap.put("sortBzdh", sortBzdh); - } - if(StringUtils.isNotEmpty(sortKprq)) { - pramsMap.put("sortKprq", sortKprq); - } +// if(StringUtils.isNotEmpty(sortPzbh)) { +// pramsMap.put("sortPzbh", sortPzbh); +// } +// if(StringUtils.isNotEmpty(sortBzdh)) { +// pramsMap.put("sortBzdh", sortBzdh); +// } +// if(StringUtils.isNotEmpty(sortKprq)) { +// pramsMap.put("sortKprq", sortKprq); +// } pramsMap.put("xfmc", xfmc); pramsMap.put("qsr", qsr); if (StringUtils.isNotBlank(rzhr)) { diff --git a/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml b/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml index 374fb859..255c73fa 100644 --- a/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml +++ b/dxhy-base/src/main/resources/mapper/BaseFpZhMapper.xml @@ -241,24 +241,25 @@ and t.tax_rate like '%,%' - - order by t.sn_voucher_number - - - order by t.sn_voucher_number desc - - - order by t.bzdh - - - order by t.bzdh desc - - - order by t.invoice_date - - - order by t.invoice_date desc - + order by t.invoice_date desc + + + + + + + + + + + + + + + + + +