1. 增加需求看板的导出

2. 修复图纸的显示
3. 兼容料盒号为中文的二维码数据
This commit is contained in:
梁州 2025-03-17 19:30:54 +08:00
parent c853315460
commit ee307fe9ea
13 changed files with 247 additions and 38 deletions

View File

@ -146,4 +146,13 @@ public class ExcelController {
public void exportWorkSummaryExcel(@RequestBody WorkSummaryQuery workSummaryQuery, HttpServletResponse response) throws IOException {
exportExcelEasyPoi.exportWorkSummaryExcel(workSummaryQuery, response);
}
/**
* 导出看板需求
* @param kanbanQuery 请求
*/
@PostMapping("/exportKanbanExcel")
public void exportKanbanExcel(@RequestBody KanbanQuery kanbanQuery, HttpServletResponse response) throws IOException {
exportExcelEasyPoi.exportKanbanExcel(kanbanQuery, response);
}
}

View File

@ -23,4 +23,9 @@ public class KanbanExcelTemplate {
*/
@Excel(name = "标识编号")
private String kanbanId;
/**
* 看板状态
*/
@Excel(name = "状态")
private String kanbanStatus;
}

View File

@ -1,10 +1,7 @@
package com.wms_main.excel.easypoi.service;
import com.wms_main.excel.easypoi.service.base.IBaseExportExcelEasyPoi;
import com.wms_main.model.dto.query.DbsQuery;
import com.wms_main.model.dto.query.KittingBomQuery;
import com.wms_main.model.dto.query.KittingBomRelationQuery;
import com.wms_main.model.dto.query.WorkSummaryQuery;
import com.wms_main.model.dto.query.*;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestBody;
@ -37,4 +34,10 @@ public interface IExportExcelEasyPoi extends IBaseExportExcelEasyPoi {
* @param workSummaryQuery 查询条件
*/
void exportWorkSummaryExcel(@RequestBody WorkSummaryQuery workSummaryQuery, HttpServletResponse response) throws IOException;
/**
* 导出看板需求
* @param kanbanQuery 查询条件
*/
void exportKanbanExcel(@RequestBody KanbanQuery kanbanQuery, HttpServletResponse response) throws IOException;
}

View File

@ -6,11 +6,8 @@ import com.wms_main.dao.*;
import com.wms_main.excel.easypoi.excelTemplate.*;
import com.wms_main.excel.easypoi.service.IExportExcelEasyPoi;
import com.wms_main.excel.easypoi.service.base.impl.BaseExportExcelEasyPoi;
import com.wms_main.model.dto.query.KittingBomQuery;
import com.wms_main.model.dto.query.KittingBomRelationQuery;
import com.wms_main.model.dto.query.WorkSummaryQuery;
import com.wms_main.model.dto.query.*;
import com.wms_main.model.po.*;
import com.wms_main.model.dto.query.DbsQuery;
import com.wms_main.repository.utils.StringUtils;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
@ -29,6 +26,7 @@ public class ExportExcelEasyPoi extends BaseExportExcelEasyPoi implements IExpor
private final ITAppSingleProductService tAppSingleProductService;// 单片服务
private final ITAppWorkService appWorkService;// 工作服务
private final ITAppWorkRecordService appWorkRecordService;// 工作记录服务
private final ITAppKanbanService appKanbanService;// 看板服务
/**
* 导出DBS计划实现
@ -252,4 +250,36 @@ public class ExportExcelEasyPoi extends BaseExportExcelEasyPoi implements IExpor
throw new IOException("数据类型不在设定值范围内。");
}
}
/**
* 导出看板数据 实现
* @param kanbanQuery 查询条件
* @param response 响应
* @throws IOException 异常
*/
@Override
public void exportKanbanExcel(KanbanQuery kanbanQuery, HttpServletResponse response) throws IOException {
if (kanbanQuery == null) {
throw new IOException("参数不能为空");
}
// 配对关系列表
List<TAppKanban> kanbanList = appKanbanService.list(new LambdaQueryWrapper<TAppKanban>()
.like(StringUtils.isNotEmpty(kanbanQuery.getGoodsId()), TAppKanban::getGoodsId, kanbanQuery.getGoodsId())
.like(StringUtils.isNotEmpty(kanbanQuery.getKanbanId()), TAppKanban::getKanbanId, kanbanQuery.getKanbanId())
.eq(kanbanQuery.getKanbanStatus() != null, TAppKanban::getKanbanStatus, kanbanQuery.getKanbanStatus()));
// excel模版列表
List<KanbanExcelTemplate> resultList = new ArrayList<>();
if (!kanbanList.isEmpty()) {
for (TAppKanban kanban : kanbanList) {
resultList.add(new KanbanExcelTemplate(
kanban.getGoodsId(),
kanban.getKanbanId(),
kanban.getKanbanStatus() == 1 ? "" : ""
));
}
} else {
resultList.add(new KanbanExcelTemplate());
}
doWriteExcel("看板需求", response, resultList, KanbanExcelTemplate.class);
}
}

View File

@ -578,7 +578,7 @@ public class ImportExcelEasyPoi extends BaseImportExcelEasyPoi implements IImpor
String oldImageName = imageRawData.getImageDetail().substring(startIndex + 1);
String fileType = imageRawData.getImageDetail().substring(endIndex);
// 文件路径
tempImage.setImagePath(fileDir + File.separator);
tempImage.setImagePath(fileDir);
// 格式化文件名
String newImageName = productId + "_" + imageRawData.getBoxNo() + fileType;
//将图片文件转为base64图片
@ -590,14 +590,6 @@ public class ImportExcelEasyPoi extends BaseImportExcelEasyPoi implements IImpor
} else {
tempImage.setImageName(oldImageName);
}
// 存储图片实例
// FileInputStream inputStream = new FileInputStream(renamedFile);
// byte[] buffer = new byte[inputStream.available()];
// if (inputStream.read(buffer) == -1) {
// inputStream.close();
// }
// StringBuilder imageBase64 = new StringBuilder(Base64.getEncoder().encodeToString(buffer));
// tempImage.setImageDetail(new String(imageBase64));
tempImage.setImageDetail("");
tempImage.setImageType(imageType);
tempImage.setFirstImportTime(LocalDateTime.now());

View File

@ -75,4 +75,9 @@ public class BoxSummary {
*/
@JsonProperty("boxQty")
private Integer boxQty;
/**
* 用于生成图纸二维码
*/
@JsonProperty("imageId")
private String imageId;
}

View File

@ -14,6 +14,11 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class ImageQuery extends PageQuery {
/**
* 图纸id
*/
@JsonProperty("imageId")
private String imageId;
/**
* 成品号/单片号
*/

View File

@ -1,4 +1,108 @@
package com.wms_main.model.vo.wms;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
/**
* 任务记录Vo
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TaskRecordVo {
/**
* 任务ID
*/
@JsonProperty("taskId")
private String taskId;
/**
* 任务类型
*/
@JsonProperty("taskType")
private Integer taskType;
/**
* 任务状态
*/
@JsonProperty("taskStatus")
private Integer taskStatus;
/**
* 任务优先级
*/
@JsonProperty("taskPriority")
private Integer taskPriority;
/**
* 载具号
*/
@JsonProperty("vehicleId")
private String vehicleId;
/**
* 起点
*/
@JsonProperty("origin")
private String origin;
/**
* 终点
*/
@JsonProperty("destination")
private String destination;
/**
* wcs任务id
*/
@JsonProperty("wcsTaskId")
private String wcsTaskId;
/**
* 创建时间
*/
@JsonProperty("createTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 完成时间
*/
@JsonProperty("finishTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime finishTime;
/**
* 料号
*/
@JsonProperty("goodsId")
private String goodsId;
/**
* 操作数量
*/
@JsonProperty("opNum")
private Integer opNum;
/**
* 库存数量
*/
@JsonProperty("stockNum")
private Integer stockNum;
/**
* 操纵用户
*/
@JsonProperty("opUser")
private String opUser;
/**
* 备注
*/
@JsonProperty("remark")
private String remark;
/**
* 申请出库的站台
*/
@JsonProperty("callStand")
private String callStand;
/**
* 物料描述
*/
@JsonProperty("goodsDesc")
private String goodsDesc;
}

View File

@ -1,94 +1,108 @@
package com.wms_main.model.vo.wms;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
/**
* 任务Vo
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TaskVo {
/**
* 任务ID
*/
@TableId(value = "task_id")
@JsonProperty("taskId")
private String taskId;
/**
* 任务类型
*/
@TableField(value = "task_type")
@JsonProperty("taskType")
private Integer taskType;
/**
* 任务状态
*/
@TableField(value = "task_status")
@JsonProperty("taskStatus")
private Integer taskStatus;
/**
* 任务优先级
*/
@TableField(value = "task_priority")
@JsonProperty("taskPriority")
private Integer taskPriority;
/**
* 载具号
*/
@TableField(value = "vehicle_id")
@JsonProperty("vehicleId")
private String vehicleId;
/**
* 起点
*/
@TableField(value = "origin")
@JsonProperty("origin")
private String origin;
/**
* 终点
*/
@TableField(value = "destination")
@JsonProperty("destination")
private String destination;
/**
* wcs任务id
*/
@TableField(value = "wcs_task_id")
@JsonProperty("wcsTaskId")
private String wcsTaskId;
/**
* 创建时间
*/
@TableField(value = "create_time")
@JsonProperty("createTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 完成时间
*/
@TableField(value = "finish_time")
@JsonProperty("finishTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime finishTime;
/**
* 料号
*/
@TableField(value = "goods_id")
@JsonProperty("goodsId")
private String goodsId;
/**
* 操作数量
*/
@TableField(value = "op_num")
@JsonProperty("opNum")
private Integer opNum;
/**
* 库存数量
*/
@TableField(value = "stock_num")
@JsonProperty("stockNum")
private Integer stockNum;
/**
* 操纵用户
*/
@TableField(value = "op_user")
@JsonProperty("opUser")
private String opUser;
/**
* 备注
*/
@TableField(value = "remark")
@JsonProperty("remark")
private String remark;
/**
* 申请出库的站台
*/
@TableField(value = "call_stand")
@JsonProperty("callStand")
private String callStand;
/**
* 物料描述
*/
@TableField(value = "goods_desc")
@JsonProperty("goodsDesc")
private String goodsDesc;
}

View File

@ -74,6 +74,7 @@ public class WcsTaskRecordVo {
private LocalDateTime finishTime;
/**
* 备注
*/@JsonProperty("remark")
*/
@JsonProperty("remark")
private String remark;
}

View File

@ -1,8 +1,11 @@
package com.wms_main.model.vo.wms;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@ -16,45 +19,64 @@ public class WcsTaskVo {
/**
* wcs任务id
*/
@JsonProperty("wcsTaskId")
private String wcsTaskId;
/**
* wcs任务状态
*/
@JsonProperty("wcsTaskStatus")
private Integer wcsTaskStatus;
/**
* wcs任务类型
*/
@JsonProperty("wcsTaskType")
private Integer wcsTaskType;
/**
* wcs任务优先级
*/
@JsonProperty("taskPriority")
private Integer taskPriority;
/**
* 载具号
*/
@JsonProperty("vehicleId")
private String vehicleId;
/**
* 起点
*/
@JsonProperty("origin")
private String origin;
/**
* 终点
*/
@JsonProperty("destination")
private String destination;
/**
* 创建时间
*/
@JsonProperty("createTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 发送时间
*/
@JsonProperty("sendTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime sendTime;
/**
* 完成时间
*/
@JsonProperty("finishTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime finishTime;
/**
* 备注
*/
@JsonProperty("remark")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private String remark;
}

View File

@ -20,9 +20,18 @@ public class FileUtils {
public static String getImageDetail(String imagePath, String imageName) {
// 获取图片实例
String imageDetail = "";
if (StringUtils.isEmpty(imagePath) || StringUtils.isEmpty(imageName)) {
// 空文件信息直接返回
return imageDetail;
}
try {
// 如果最后一位是/或者\则去掉
String lastStr = imagePath.substring(imagePath.length() - 1);
if (lastStr.equals("/") || lastStr.equals("\\")) {
imagePath = imagePath.substring(0, imagePath.length() - 1);
}
//将图片文件转为base64图片
File imageFile = new File(imagePath + imageName);
File imageFile = new File(imagePath + File.separator + imageName);
FileInputStream inputStream = new FileInputStream(imageFile);
byte[] buffer = new byte[inputStream.available()];
if (inputStream.read(buffer) == -1) {

View File

@ -579,6 +579,13 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService
if (StringUtils.isNotEmpty(thisStandWork.getSingleProductId())) {
queryProductId = thisStandWork.getSingleProductId();
}
// 查询到对应的图纸信息
List<TAppImage> imageList = appImageService.list(new LambdaQueryWrapper<TAppImage>()
.eq(TAppImage::getProductId, queryProductId)
.eq(TAppImage::getBoxNo, thisStandWork.getBoxNo()));
if (imageList != null && !imageList.isEmpty()) {
boxSummary.setImageId(imageList.getFirst().getImageId());
}
if (productType == 1) {
// 非服务件---查询非服务件清单
List<TAppProduct> productList = appProductService.list(new LambdaQueryWrapper<TAppProduct>()
@ -783,6 +790,7 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService
}
// 查询图纸
List<TAppImage> imageList = appImageService.list(new LambdaQueryWrapper<TAppImage>()
.eq(StringUtils.isNotEmpty(imageQuery.getImageId()), TAppImage::getImageId, imageQuery.getImageId())
.eq(StringUtils.isNotEmpty(imageQuery.getProductId()), TAppImage::getProductId, imageQuery.getProductId())
.eq(StringUtils.isNotEmpty(imageQuery.getBoxNo()), TAppImage::getBoxNo, imageQuery.getBoxNo())
.eq(imageQuery.getImageType() != null, TAppImage::getImageType, imageQuery.getImageType()));
@ -980,6 +988,7 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService
/**
* 更新工作信息---实现
*
* @param updateWorkRequest 更新请求
* @return 处理结果
*/
@ -1022,6 +1031,7 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService
/**
* 关闭当前工作
*
* @param closeWorkRequest 关闭请求
* @return 处理结果
*/