From fe90d2212b965e5e3a6cdb508e23c339cdd20043 Mon Sep 17 00:00:00 2001 From: PigBaoBei <2739175034@qq.com> Date: Fri, 24 Nov 2023 21:09:36 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=BE=E6=94=B6=E5=88=97=E8=A1=A8=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springblade/common/utils/FileUtil.java | 197 +++++++++++++++++- .../vo/DistributionSignPrintVO.java | 1 + .../vo/DistributionSigndetailVO.java | 16 ++ .../DistributionSignforController.java | 8 + .../dto/DistributionSigndetailDTO.java | 30 +++ .../mapper/DistributionSigndetailMapper.xml | 16 ++ .../mapper/DistributionSignforMapper.java | 9 + .../mapper/DistributionSignforMapper.xml | 12 +- .../service/IDistributionSignforService.java | 8 + .../impl/DistributionAddvalueServiceImpl.java | 6 +- .../DistributionDeliveryInfoServiceImpl.java | 16 ++ .../impl/DistributionSignforServiceImpl.java | 101 ++++++++- 12 files changed, 413 insertions(+), 7 deletions(-) diff --git a/blade-biz-common/src/main/java/org/springblade/common/utils/FileUtil.java b/blade-biz-common/src/main/java/org/springblade/common/utils/FileUtil.java index ad1b60c30..31d37a49e 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/utils/FileUtil.java +++ b/blade-biz-common/src/main/java/org/springblade/common/utils/FileUtil.java @@ -1,8 +1,19 @@ package org.springblade.common.utils; -import java.io.File; +import org.springblade.common.constant.CommonConstant; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.lang.reflect.Type; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; import java.util.List; import java.util.TimerTask; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import static io.undertow.servlet.core.BlockingWriterSenderImpl.BUFFER_SIZE; /** * 文件工具类 @@ -18,13 +29,195 @@ public class FileUtil extends TimerTask { this.LocalTempFiles = list; } + public static File checkZipFile(String reservationCode) { + String savePath = "D:/Test" +"/"+ reservationCode; + + return new File(savePath+".zip"); + } + + @Override public void run() { for (String localTempFile : LocalTempFiles) { File file = new File(localTempFile); - if (file.isFile()){ + if (file.isFile()) { file.delete(); } } } + + + /** + * 处理签收图片 + * + * @param urls + * @param type 托盘类型 + * @param code 预约编码 + * @param consignee 客户名称 + */ + public static void handleSignPictureZip(List urls, String type, String code, String consignee) { + //将图片下载至本地中 +// String imgPath = CommonConstant.SYSTEMFILEPATH; + String savePath = "D:/Test" +"/"+ code; + String imgPath = savePath; + + // 打开连接 + //设置请求超时为20s + switch (type) { + case "photo_1": + //上门 + imgPath += "\\doorr"; + break; + case "photo_2": + imgPath += "\\stacking"; + //堆码 + break; + case "photo_3": + imgPath +="\\friability"; + //易碎 + break; + case "photo_4": + imgPath +="\\home-delivery"; + //家配 + break; + case "photo_5": + imgPath +="\\signing"; + //签收 + break; + } + + for (String imgUrl : urls) { + String str = imgUrl.substring(imgUrl.lastIndexOf("/")+1, imgUrl.length()); + try { + //下载远程地址图片 + download(imgUrl, imgPath, str); + //将该客户的签收图片进行ZIP压缩 + + //读取该文件路径下的文件夹 + File file = new File(savePath); + fileToZip(file); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + } + + + + /** + * sourceFile一定要是文件夹 + * 默认会在同目录下生成zip文件 + * + * @param sourceFile + * @throws Exception + */ + public static void fileToZip(File sourceFile) throws Exception { + + if (!sourceFile.exists()) { + throw new RuntimeException("不存在"); + } + if (!sourceFile.isDirectory()) { + throw new RuntimeException("不是文件夹"); + } + //zip文件生成位置 + File zipFile = new File(sourceFile.getAbsolutePath() + ".zip"); + FileOutputStream fos = new FileOutputStream(zipFile); + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos)); + fileToZip(zos, sourceFile, ""); + zos.close(); + fos.close(); + + } + + private static void fileToZip(ZipOutputStream zos, File sourceFile, String path) throws Exception { + + System.out.println(sourceFile.getAbsolutePath()); + + //如果是文件夹只创建zip实体即可,如果是文件,创建zip实体后还要读取文件内容并写入 + if (sourceFile.isDirectory()) { + path = path + sourceFile.getName() + "/"; + ZipEntry zipEntry = new ZipEntry(path); + zos.putNextEntry(zipEntry); + for (File file : sourceFile.listFiles()) { + fileToZip(zos, file, path); + } + } else { + //创建ZIP实体,并添加进压缩包 + ZipEntry zipEntry = new ZipEntry(path + sourceFile.getName()); + zos.putNextEntry(zipEntry); + byte[] bufs = new byte[1024 * 10]; + //读取待压缩的文件并写进压缩包里 + FileInputStream fis = new FileInputStream(sourceFile); + BufferedInputStream bis = new BufferedInputStream(fis, 1024 * 10); + int read = 0; + while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) { + zos.write(bufs, 0, read); + } + bis.close(); + fis.close(); + } + } + + private static void download(String imgUrl, String imgPath, String str) throws IOException { + URL url = new URL(imgUrl); + URLConnection con = url.openConnection(); + con.setConnectTimeout(20 * 1000); + //文件路径不存在 则创建 + File sf = new File(imgPath); + if (!sf.exists()) { + sf.mkdirs(); + } + //jdk 1.7 新特性自动关闭 + InputStream in = con.getInputStream(); + OutputStream out = new FileOutputStream(sf.getPath() + "\\" + str); + //创建缓冲区 + byte[] buff = new byte[1024]; + int n; + // 开始读取 + while ((n = in.read(buff)) >= 0) { + out.write(buff, 0, n); + } + } + + +// /** +// * 文件下载到指定路径 +// * +// * @param urlString 链接 +// * @param savePath 保存路径 +// * @param filename 文件名 +// * @throws Exception +// */ +// public static void download(String urlString, String savePath, String filename, String code) throws IOException, MalformedURLException { +// // 构造URL +//// String imgPath = CommonConstant.SYSTEMFILEPATH; +// +// //将图片下载至本地中 +// String imgPath = "D:\\Test" + code; +// URL url = new URL(urlString); +// // 打开连接 +// URLConnection con = url.openConnection(); +// //设置请求超时为20s +// con.setConnectTimeout(20 * 1000); +// //文件路径不存在 则创建 +// File sf = new File(savePath); +// if (!sf.exists()) { +// sf.mkdirs(); +// } +// //jdk 1.7 新特性自动关闭 +// try (InputStream in = con.getInputStream(); +// OutputStream out = new FileOutputStream(sf.getPath() + "\\" + str)) { +// //创建缓冲区 +// byte[] buff = new byte[1024]; +// int n; +// // 开始读取 +// while ((n = in.read(buff)) >= 0) { +// out.write(buff, 0, n); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + } diff --git a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionSignPrintVO.java b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionSignPrintVO.java index 636332837..327570cc0 100644 --- a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionSignPrintVO.java +++ b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionSignPrintVO.java @@ -30,6 +30,7 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) public class DistributionSignPrintVO extends DistributionSignPrintEntity { + private static final long serialVersionUID = 1L; } diff --git a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionSigndetailVO.java b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionSigndetailVO.java index 86849b643..94eb40336 100644 --- a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionSigndetailVO.java +++ b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/vo/DistributionSigndetailVO.java @@ -126,6 +126,22 @@ public class DistributionSigndetailVO extends DistributionSigndetailEntity { // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private String sjsigningTime; + @ApiModelProperty(value = "审核人名称") +// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private String examineUserName; + + @ApiModelProperty(value = "审核人Id") +// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private String examineUserId; + + @ApiModelProperty(value = "审核人Id") +// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private String signeeName; + + @ApiModelProperty(value = "审核人Id") +// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private Long signeeId; + /** * 包条信息 */ diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionSignforController.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionSignforController.java index 55a5a7887..fca643773 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionSignforController.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionSignforController.java @@ -368,6 +368,14 @@ public class DistributionSignforController extends BladeController { } + @GetMapping("/handlePicture") + @ApiOperationSupport(order = 7) + @ApiOperation(value = "PC下载签收图片", notes = "传入ids") + public void handlePicture(@RequestParam String ids,HttpServletResponse res) { + distributionSignforService.handlePicture(ids,res); + } + + diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/DistributionSigndetailDTO.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/DistributionSigndetailDTO.java index 8b56384a7..fe34bc7c8 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/DistributionSigndetailDTO.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/DistributionSigndetailDTO.java @@ -110,5 +110,35 @@ public class DistributionSigndetailDTO extends DistributionSigndetailEntity { @ApiModelProperty(value = "查询创建时间") private String createTime_query; + /** + * 司机名称 + */ + @ApiModelProperty(value = "driverName") + private String driverName; + + /** + * 车牌号 + */ + @ApiModelProperty(value = "车牌号") + private String vehicleName; + + /** + * 司机名称 + */ + @ApiModelProperty(value = "driverName") + private String taskTime; + + /** + * 审核人 + */ + @ApiModelProperty(value = "审核人") + private String examineUserName; + + /** + * 签收人 + */ + @ApiModelProperty(value = "签收人") + private String signeeName; + } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSigndetailMapper.xml b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSigndetailMapper.xml index 3fb82cf7e..fa3b7ed8a 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSigndetailMapper.xml +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSigndetailMapper.xml @@ -138,6 +138,10 @@ lds.sjsigning_time sjsigningTime, lddl.driver_name driverName, lddl.vehicle_name vehicleName, + lds.examine_user_name examineUserName, + lds.examine_user_id examineUserId, + lds.signee_name signeeName, + lds.signee_id signeeId, lddl.kind, CASE lddl.kind WHEN '1' THEN (SELECT ldds.driver_phone FROM logpm_distribution_delivery_self AS ldds WHERE ldds.delivery_id = lddl.id AND ldds.is_master = 2) @@ -159,6 +163,9 @@ and ldr.service_number like concat('%',#{param.serviceNumber},'%') + + and lds.signee_name like concat('%',#{param.signeeName},'%') + and ldsa.order_code like concat('%',#{param.orderCode},'%') @@ -204,6 +211,15 @@ and lddl.warehouse_id = #{param.warehouseId} and ldr.warehouse_id =#{param.warehouseId} + + and lddl.driver_name like concat('%',#{param.driverName},'%') + + + and lddl.vehicle_name like concat('%',#{param.vehicleName},'%') + + + and lds.examine_user_name like concat('%',#{param.examineUserName},'%') + diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSignforMapper.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSignforMapper.java index 54c56787c..f03d6701f 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSignforMapper.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionSignforMapper.java @@ -31,6 +31,7 @@ import com.logpm.distribution.vo.app.DistributionAppSignforVO; import com.logpm.distribution.vo.app.DistributionAppStockArticleVO; import com.logpm.oldproject.dto.SignPushDataUnitDTO; import org.apache.ibatis.annotations.Param; +import org.springblade.core.secure.BladeUser; import java.util.List; @@ -285,4 +286,12 @@ public interface DistributionSignforMapper extends BaseMapper UPDATE logpm_distribution_signfor lds set lds.loadedin_number = ( lds.loadedin_number - #{nub} ) WHERE lds.is_deleted =0 and lds.reservation_id = #{reservationId} and loadedin_number !=0 and lds.delivery_id = #{deliveryId} + + UPDATE logpm_distribution_signfor SET signee_name = #{user.nickName},signee_id = #{user.userId} WHERE signee_name is null and delivery_id = #{deliveryId} and reservation_id = #{reservationId} + DELETE FROM logpm_distribution_signfor @@ -284,6 +287,8 @@ -- logpm_distribution_signfor lds--> SELECT lds.id id, + lds.signee_name signeeName, + lds.signee_id signeeId, ldr.mall_name mallName, lds.positioning positioning, lddl.warehouse_name warehouseName, @@ -411,6 +416,9 @@ and lddl.loading_time between #{param.loadingTimeSection[0]} and #{param.loadingTimeSection[1]} + + and lds.signee_name like concat('%',#{param.signeeName},'%') + and lds.sjsigning_time between #{param.sjsigningTimeSection[0]} and #{param.sjsigningTimeSection[1]} @@ -483,7 +491,7 @@ JOIN logpm_distribution_delivery_list lddl ON lddl.id = lds.delivery_id JOIN logpm_distribution_reservation ldr ON ldr.id = lds.reservation_id - lds.is_deleted = 0 and lds.driver_signing ='1' and ldr.is_deleted = 0 and lddl.is_deleted = 0 + lds.is_deleted = 0 and lds.driver_signing ='1' and ldr.is_deleted = 0 and lddl.is_deleted = 0 AND lds.signing_status = '1' and ldr.mall_name like concat('%',#{param.mallName},'%') @@ -1037,7 +1045,7 @@ WHERE ldla.reservation_id = #{reservationId} and ldla.delivery_list_id = #{deliveryListId} - SELECT * FROM logpm_distribution_sign_print WHERE reservation_id = #{reservationId} and is_deleted = 0