Jelajahi Sumber

修改码包下载和不需要的一些代码

tanzhongran 4 tahun lalu
induk
melakukan
c622fad969

+ 1 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/console/QrPackageController.java

@@ -1,6 +1,7 @@
 package com.abi.qms.platform.controller.console;
 
 import com.abi.qms.platform.dto.req.*;
+import com.abi.qms.platform.dto.res.CheckQrPackageRepetitiveRes;
 import com.abi.qms.platform.dto.res.GetQrPackageDetailRes;
 import com.abi.qms.platform.dto.res.ListQrPackageRes;
 import com.abi.qms.platform.service.QrPackageService;

+ 31 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/CheckQrPackageRepetitiveReq.java

@@ -0,0 +1,31 @@
+package com.abi.qms.platform.dto.req;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * @author:Andy.Tan
+ * @Description: 校验订单号和物料重复入参
+ */
+@Data
+@Schema
+public class CheckQrPackageRepetitiveReq implements Serializable {
+
+    @ApiModelProperty("码包id")
+    private Long id;
+
+    @NotEmpty(message = "SAP单号为空")
+    @Size(max = 20, message = "SAP单号不能超过20字")
+    @ApiModelProperty("SAP单号")
+    private String sapOrderNo;
+
+    @NotNull(message = "物料名称为空")
+    @ApiModelProperty(value = "物料id")
+    private Long materialId;
+}

+ 1 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ValidSAPOrderNoAndMaterialReq.java

@@ -24,4 +24,5 @@ public class ValidSAPOrderNoAndMaterialReq implements Serializable{
     @NotEmpty(message = "SAP单号为空")
     @ApiModelProperty("SAP单号")
     private String sapOrderNo;
+
 }

+ 19 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/CheckQrPackageRepetitiveRes.java

@@ -0,0 +1,19 @@
+package com.abi.qms.platform.dto.res;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * @author:Andy.Tan
+ * @Description: 校验订单号和物料重复出参
+ */
+@Data
+@Schema
+public class CheckQrPackageRepetitiveRes implements Serializable {
+
+}

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/mq/GenerateCodeConsumer.java

@@ -281,7 +281,7 @@ public class GenerateCodeConsumer {
 				//放入oss地址
 				qrPackage.setDownloadPath(null ==  result.get("data") ? "" :(String) result.get("data"));
 			}
-//			//放入oss地址和密码
+			//放入oss地址和密码
 			qrPackage.setZipPassword(pas);
 			//删除生成文件
 			FileUtil.del(file);

+ 129 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/util/OssFileDownloadUtil.java

@@ -0,0 +1,129 @@
+package com.abi.qms.platform.infrastructure.util;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpHeaders;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.*;
+
+@Slf4j
+public class OssFileDownloadUtil {
+
+    public String downloadFile(String urlPath, HttpServletResponse response) {
+        String fileFullName = "";
+        try {
+            // 统一资源
+            URL url = new URL(urlPath);
+            // 连接类的父类,抽象类
+            URLConnection urlConnection = url.openConnection();
+            // http的连接类
+            HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
+            //设置超时
+            httpURLConnection.setConnectTimeout(1000 * 5);
+            //设置请求方式,默认是GET
+            httpURLConnection.setRequestMethod("GET");
+            // 设置字符编码
+            httpURLConnection.setRequestProperty("Charset", "UTF-8");
+            // 打开到此 URL引用的资源的通信链接(如果尚未建立这样的连接)。
+            httpURLConnection.connect();
+            // 文件大小
+            int fileLength = httpURLConnection.getContentLength();
+
+            // 控制台打印文件大小
+            log.info("您要下载的文件大小为:" + fileLength / (1024 * 1024) + "MB");
+
+            // 建立链接从请求中获取数据
+            URLConnection con = url.openConnection();
+            BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream());
+            // 指定文件名称(有需求可以自定义)
+            if (urlPath.contains("/")) {
+                fileFullName = urlPath.substring(urlPath.lastIndexOf("/") + 1);
+            } else {
+                fileFullName = urlPath;
+            }
+
+            log.info("您要下载的文件为:" + fileFullName);
+            fileFullName = URLEncoder.encode(fileFullName, "UTF-8");
+
+            response.reset();
+            response.setCharacterEncoding("UTF-8");
+            response.setContentType("application/octet-stream");
+            //3.设置content-disposition响应头控制浏览器以下载的形式打开文件
+            response.addHeader("Content-Disposition", "attachment;filename=" +
+                    new String(fileFullName.getBytes(), "utf-8"));
+
+            //COR
+            response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
+            response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
+            response.setHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,Content-Disposition");
+
+            int len = 0;
+            byte[] buffer = new byte[1024];
+            OutputStream out = response.getOutputStream();
+            while ((len = bin.read(buffer)) > 0) {
+                //将缓冲区的数据输出到客户端浏览器
+                out.write(buffer, 0, len);
+            }
+
+            bin.close();
+            log.info("文件下载成功!");
+        } catch (MalformedURLException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            log.info("文件下载失败!");
+
+        } finally {
+
+        }
+
+        return fileFullName;
+    }
+
+    public void downLoadFromUrl(String urlStr, String fileName, String savePath) throws IOException {
+        URL url = new URL(urlStr);
+        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+        //设置超时间为3秒
+        conn.setConnectTimeout(30 * 1000);
+        //防止屏蔽程序抓取而返回403错误
+        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+
+        //得到输入流
+        InputStream inputStream = conn.getInputStream();
+        //获取自己数组
+        byte[] getData = readInputStream(inputStream);
+
+        //文件保存位置
+        File saveDir = new File(savePath);
+        if (!saveDir.exists()) {
+            saveDir.mkdir();
+        }
+        File file = new File(saveDir + File.separator + fileName);
+        FileOutputStream fos = new FileOutputStream(file);
+        fos.write(getData);
+        if (fos != null) {
+            fos.close();
+        }
+        if (inputStream != null) {
+            inputStream.close();
+        }
+
+        log.info("info:" + url + " download success");
+
+    }
+
+    public byte[] readInputStream(InputStream inputStream) throws IOException {
+        byte[] buffer = new byte[1024];
+        int len = 0;
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        while ((len = inputStream.read(buffer)) != -1) {
+            bos.write(buffer, 0, len);
+        }
+        bos.close();
+        return bos.toByteArray();
+    }
+}

+ 1 - 7
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/QrPackageService.java

@@ -3,6 +3,7 @@ package com.abi.qms.platform.service;
 
 import com.abi.qms.platform.dao.entity.QrPackage;
 import com.abi.qms.platform.dto.req.*;
+import com.abi.qms.platform.dto.res.CheckQrPackageRepetitiveRes;
 import com.abi.qms.platform.dto.res.GetQrPackageDetailRes;
 import com.abi.qms.platform.dto.res.ListQrPackageRes;
 import com.abi.qms.platform.dto.res.ValidSAPOrderNoAndMaterialRes;
@@ -54,13 +55,6 @@ public interface QrPackageService {
 	 */
 	void downloadQrPackage(DownloadQrPackageReq downloadQrPackageReq, HttpServletResponse response);
 
-	/**
-	 * 删除生成的临时文件,上传阿里云,并更新码包的下载路径
-	 * @param txtFile txt文件
-	 * @param zipFile 压缩文件
-	 */
-	void delFileAndUpdatePath(File txtFile, File zipFile, Long qrPackageId);
-
 	/**
 	 * 码生成失败回滚
 	 */

+ 38 - 68
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrPackageServiceImpl.java

@@ -1,8 +1,6 @@
 package com.abi.qms.platform.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.io.IoUtil;
 import com.abi.base.foundation.util.JsonUtil;
 import com.abi.base.foundation.util.RedisClient;
 import com.abi.qms.platform.constant.RedisKeysConstant;
@@ -13,15 +11,8 @@ import com.abi.qms.platform.dao.mapper.QrPackageBatchMapper;
 import com.abi.qms.platform.dao.mapper.QrPackageDownloadRecordMapper;
 import com.abi.qms.platform.dao.mapper.QrPackageMapper;
 import com.abi.qms.platform.dao.vo.result.QrPackageVO;
-import com.abi.qms.platform.dto.req.DeleteQrPackageReq;
-import com.abi.qms.platform.dto.req.DownloadQrPackageReq;
-import com.abi.qms.platform.dto.req.GetQrPackageDetailReq;
-import com.abi.qms.platform.dto.req.ListQrPackageReq;
-import com.abi.qms.platform.dto.req.PassQrPackageReq;
-import com.abi.qms.platform.dto.req.RefuseQrPackageReq;
-import com.abi.qms.platform.dto.req.SaveQrPackageReq;
-import com.abi.qms.platform.dto.req.SendMobileMsgReq;
-import com.abi.qms.platform.dto.req.ValidSAPOrderNoAndMaterialReq;
+import com.abi.qms.platform.dto.req.*;
+import com.abi.qms.platform.dto.res.CheckQrPackageRepetitiveRes;
 import com.abi.qms.platform.dto.res.GetQrPackageDetailRes;
 import com.abi.qms.platform.dto.res.ListQrPackageRes;
 import com.abi.qms.platform.dto.res.ValidSAPOrderNoAndMaterialRes;
@@ -44,18 +35,8 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
 
 import javax.servlet.http.HttpServletResponse;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URLEncoder;
 import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -171,7 +152,8 @@ public class QrPackageServiceImpl implements QrPackageService {
             req.setPackageBatchBeanList(batchBeanList);
         }
 
-        //
+        //3-如果是盖码,那么查询盖码得默认箱码幅面,并放入入参
+        //TODO
 
 
     }
@@ -258,8 +240,9 @@ public class QrPackageServiceImpl implements QrPackageService {
      * @return QrPackage 如果是修改码包就把码包查出来
      */
     private QrPackage checkRequestWhenSaveQrPackage(SaveQrPackageReq req){
-        Long qrPackageId = req.getId();
         QrPackage qrPackage = null;
+        Long qrPackageId = req.getId();
+        boolean isAdd = (req.getId() == null);
 
         // 修改码包时的条件限制
         if (qrPackageId != null) {
@@ -318,6 +301,18 @@ public class QrPackageServiceImpl implements QrPackageService {
             }
         }
 
+        if(!isAdd && wholeUser.getFactoryId()!=null){
+            //一级包材厂不允许修改码包
+            if(FactoryLevelEnum.ONE.is(factoryCover.getFactoryLevel())){
+                throw new BusinessException("一级包材厂不允许修改码包");
+            }
+            //二级包材厂or无级包材厂,只能改自己得码包
+            if(!FactoryLevelEnum.ONE.is(factoryCover.getFactoryLevel())
+                    && !wholeUser.getFactoryId().equals(qrPackage.getFactoryCoverLevelTwoId())){
+                throw new BusinessException("包材厂只允许修改自己的码包");
+            }
+        }
+
         //校验批次号
         if (CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())) {
             //同一个码包内,不同批次的批次号不一样
@@ -461,31 +456,15 @@ public class QrPackageServiceImpl implements QrPackageService {
         }
 
         //开始下载
-        BufferedInputStream in = null;
-        BufferedOutputStream out = null;
+        String url = qrPackage.getDownloadPath();
         try {
-            // TODO 从阿里云OSS读取文件,替换下面的测试代码
-            // TODO in = new BufferedInputStream(ossObject.getObjectContent());
-            in = new BufferedInputStream(new FileInputStream(new File("E:\\firefox_download\\202104161027287567357.zip")));
-            out = new BufferedOutputStream(response.getOutputStream());
-
-            String fileName = qrPackage.getSapOrderNo() + ".zip";
-            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
-
-            byte[] b = new byte[1024];
-            int len = 0;
-            while (-1 != (len = in.read(b))) {
-                out.write(b, 0, len);
-            }
-            out.flush();
-        } catch (IOException e) {
-            log.error("IOException", e);
-        } finally {
-            IoUtil.close(in);
-            IoUtil.close(out);
+            new OssFileDownloadUtil().downloadFile(url, response);
+        } catch (Exception e) {
+            log.error("下载失败", e);
+            throw new BusinessException("下载失败");
         }
 
-        // 插入码包下载记录
+        //插入码包下载记录
         Long userId = userUtil.getUser().getId();
         QrPackageDownloadRecord downloadRecord = new QrPackageDownloadRecord()
                 .setCreateBy(userId)
@@ -494,24 +473,6 @@ public class QrPackageServiceImpl implements QrPackageService {
 
     }
 
-    /**
-     * 删除生成的临时文件,并更新码包的下载路径
-     *
-     * @param txtFile txt文件
-     * @param zipFile 压缩文件
-     */
-    @Override
-    public void delFileAndUpdatePath(File txtFile, File zipFile, Long qrPackageId) {
-        // TODO 上传zip包到阿里云OSS后,删除本次生成的txt和zip文件
-        FileUtil.del(txtFile);
-        FileUtil.del(zipFile);
-
-        // TODO 更新下载路径
-        String downloadPath = "";
-        QrPackage update = new QrPackage().setId(qrPackageId).setDownloadPath(downloadPath);
-        qrPackageMapper.updateById(update);
-    }
-
     /**
      * 码生成失败回滚
      */
@@ -522,17 +483,26 @@ public class QrPackageServiceImpl implements QrPackageService {
         qrPackageMapper.updateById(qrPackageUpdate);
     }
 
+    /**
+     * 校验是否存在SAP订单号和物料重复数据
+     * @param req
+     * @return
+     */
     @Override
     public ValidSAPOrderNoAndMaterialRes validSAPOrderNoAndMaterial(ValidSAPOrderNoAndMaterialReq req) {
+        //查询存在的列表
         QueryWrapper<QrPackage> qrPackageQuery = new QueryWrapper<>();
         qrPackageQuery.eq("material_id", req.getMaterialId());
         qrPackageQuery.eq("sap_order_no", req.getSapOrderNo());
         qrPackageQuery.eq("is_delete", 0);
         List<QrPackage> qrPackages = qrPackageMapper.selectList(qrPackageQuery);
-        ValidSAPOrderNoAndMaterialRes validSAPOrderNoAndMaterialRes = new ValidSAPOrderNoAndMaterialRes();
-        List<ValidSAPOrderNoAndMaterialRes.PackageBean> packageBeans = PojoConverterUtils.copyList(qrPackages, ValidSAPOrderNoAndMaterialRes.PackageBean.class);
-        validSAPOrderNoAndMaterialRes.setPackageBeanList(packageBeans);
-        return validSAPOrderNoAndMaterialRes;
+
+        //构造出参
+        ValidSAPOrderNoAndMaterialRes res = new ValidSAPOrderNoAndMaterialRes();
+        List<ValidSAPOrderNoAndMaterialRes.PackageBean> packageBeanList = PojoConverterUtils.copyList(qrPackages, ValidSAPOrderNoAndMaterialRes.PackageBean.class);
+        res.setPackageBeanList(packageBeanList);
+
+        return res;
     }
 
     /**

+ 1 - 1
abi-cloud-qr-platform-server/src/main/resources/dao/mapper/QrPackageMapper.xml

@@ -81,7 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 AND qp.sap_order_no like concat('%',#{param.sapOrderNo},'%')
             </if>
             <if test="param.factoryCoverId != null">
-                AND qp.factory_cover_id = #{param.factoryCoverId}
+                AND (qp.factory_cover_id = #{param.factoryCoverId} or qp.factory_cover_level_two_id = #{param.factoryCoverId})
             </if>
             <if test="param.applyStatus != null">
                 AND qp.apply_status = #{param.applyStatus}