From d00908c6cc1aa9d9f7e88852709833d5c8d22821 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 3 Aug 2026 14:28:31 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A=E4=BB=BB=E5=8A=A1=E5=8F=B7?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E3=80=81=E5=8C=85=E8=A1=A3=E4=B8=8B=E6=96=99?= =?UTF-8?q?=E5=8D=A1=E6=8E=A7=E3=80=81=E5=AF=BC=E5=87=BAPDF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wms/nladmin-system/nlsso-server/pom.xml | 24 +++ .../coderule/impl/SysCodeRuleServiceImpl.java | 9 +- .../service/logging/ISysLogService.java | 2 +- .../logging/impl/SysLogServiceImpl.java | 149 +++++++++++++++++- .../controller/ReviewSignController.java | 8 + .../service/IMdPdReviewsignService.java | 5 + .../dao/mapper/MdPdReviewsignMapper.java | 9 ++ .../dao/mapper/MdPdReviewsignMapper.xml | 41 +++++ .../impl/MdPdReviewsignServiceImpl.java | 107 +++++++++++++ .../util/tasks/EmptyDiskConveyTask.java | 2 +- .../util/tasks/PalletizingDownTask.java | 2 +- .../service/util/tasks/TabletingInTask.java | 78 ++++----- .../src/views/monitor/log/errorLog.vue | 4 +- .../src/views/wms/statement/review/index.vue | 26 ++- 14 files changed, 404 insertions(+), 62 deletions(-) diff --git a/wms/nladmin-system/nlsso-server/pom.xml b/wms/nladmin-system/nlsso-server/pom.xml index 3e46026..776e4da 100644 --- a/wms/nladmin-system/nlsso-server/pom.xml +++ b/wms/nladmin-system/nlsso-server/pom.xml @@ -481,6 +481,30 @@ 3.16.4 + + + com.itextpdf + kernel + 7.2.5 + + + com.itextpdf + layout + 7.2.5 + + + + com.itextpdf + font-asian + 7.2.5 + + + + cn.hutool + hutool-all + 5.8.22 + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java index 3bad5e4..9d9f2f2 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java @@ -64,9 +64,14 @@ public class SysCodeRuleServiceImpl extends ServiceImpl().eq(SysCodeRule::getCode, code)).getId(); // 如果flag = 1就执行更新数据库的操作 String flag = (String) form.get("flag"); - List ruleDetails = codeRuleDetailMapper.selectList(new LambdaQueryWrapper() + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(SysCodeRuleDetail::getCode_rule_id, id) - .orderByAsc(SysCodeRuleDetail::getSort_num)); + .orderByAsc(SysCodeRuleDetail::getSort_num); + // 仅在真正生成编码时加行级锁,防止并发场景下编码重复;预览模式不加锁,避免不必要的阻塞 + if ("1".equals(flag)) { + wrapper.last("FOR UPDATE"); + } + List ruleDetails = codeRuleDetailMapper.selectList(wrapper); String demo = ""; boolean isSame = true; for(SysCodeRuleDetail detail : ruleDetails) { diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java index 5701586..990e10a 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java @@ -57,5 +57,5 @@ public interface ISysLogService extends IService { @Async void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, SysLog log); - void download(Map map, HttpServletResponse response, String[] product_area) throws IOException; + void download(Map map, HttpServletResponse response, String[] product_area) throws IOException; } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java index b899b87..ab94748 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java @@ -6,6 +6,17 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.itextpdf.kernel.geom.PageSize; +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.layout.Document; +import com.itextpdf.layout.element.Paragraph; +import com.itextpdf.layout.element.Table; +import com.itextpdf.layout.element.Cell; +import com.itextpdf.layout.properties.TextAlignment; +import com.itextpdf.layout.properties.UnitValue; +import com.itextpdf.kernel.font.PdfFont; +import com.itextpdf.kernel.font.PdfFontFactory; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -15,8 +26,6 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.reflect.MethodSignature; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; -import org.nl.common.utils.FileUtil; -import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.StringUtils; import org.nl.common.utils.ValidationUtil; import org.nl.system.service.logging.ISysLogService; @@ -31,7 +40,10 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Method; import java.lang.reflect.Parameter; +import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** *

@@ -45,6 +57,9 @@ import java.util.*; @Service public class SysLogServiceImpl extends ServiceImpl implements ISysLogService { + private static final Pattern BAD_REQUEST_EX_PATTERN = Pattern.compile("org\\.nl\\.common\\.exception\\.BadRequestException:\\s*(.+?)(?:\\r?\\n|\\s+at\\s+|$)"); + private static final Pattern GENERAL_EX_PATTERN = Pattern.compile("Exception:\\s*(.+?)(?:\\r?\\n|\\s+at\\s+|$)"); + @Autowired private SysLogMapper logMapper; @@ -114,7 +129,7 @@ public class SysLogServiceImpl extends ServiceImpl impleme logMapper.insert(logDto); } - @Override + /* @Override public void download(Map map, HttpServletResponse response, String[] product_area) throws IOException { String blurry = ObjectUtil.isNotEmpty(map.get("blurry"))?map.get("blurry").toString():null; String log_type = ObjectUtil.isNotEmpty(map.get("log_type"))?map.get("log_type").toString():null; @@ -143,6 +158,87 @@ public class SysLogServiceImpl extends ServiceImpl impleme list.add(mp); } FileUtil.downloadExcel(list, response); + }*/ + + @Override + public void download(Map map, HttpServletResponse response, String[] product_area) throws IOException { + // pdf导出 + // 1.提取查询参数 + String blurry = ObjectUtil.isNotEmpty(map.get("blurry")) ? map.get("blurry").toString() : null; + String log_type = ObjectUtil.isNotEmpty(map.get("log_type")) ? map.get("log_type").toString() : null; + String username = ObjectUtil.isNotEmpty(map.get("username")) ? map.get("username").toString() : null; + String begin_time = ObjectUtil.isNotEmpty(map.get("begin_time")) ? map.get("begin_time").toString() : null; + String end_time = ObjectUtil.isNotEmpty(map.get("end_time")) ? map.get("end_time").toString() : null; + + // 2.查询数据库 + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(log_type), SysLog::getLog_type, log_type) + .eq(ObjectUtil.isNotEmpty(username), SysLog::getUsername, username) + .like(ObjectUtil.isNotEmpty(blurry), SysLog::getDescription, blurry) + .le(ObjectUtil.isNotEmpty(end_time), SysLog::getCreate_time, end_time) + .ge(ObjectUtil.isNotEmpty(begin_time), SysLog::getCreate_time, begin_time) + .orderByDesc(SysLog::getCreate_time); + List dataList = this.list(lam); + + // 3.设置响应头【前端文件下载】 + response.reset(); + response.setContentType("application/pdf"); + String fileName = "系统异常日志.pdf"; + fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.setHeader("Cache-Control", "no-cache"); + + // 4.构建PDF,设置【A4横向】核心改动 + PdfWriter writer = new PdfWriter(response.getOutputStream()); + PdfDocument pdfDoc = new PdfDocument(writer); + // A4横向旋转 + pdfDoc.setDefaultPageSize(PageSize.A4.rotate()); + Document document = new Document(pdfDoc); + + // 中文字体 + PdfFont font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED); + + // 标题 + Paragraph title = new Paragraph("系统异常日志列表") + .setFont(font) + .setFontSize(14) + .setTextAlignment(TextAlignment.CENTER); + document.add(title); + document.add(new Paragraph("\n")); + + // 表头 + String[] headers = {"用户名", "IP", "IP来源", "描述", "浏览器", "请求耗时", "创建日期","错误信息"}; + // 等分列宽,不再使用固定宽度 + float[] columnWidths = new float[headers.length]; + Arrays.fill(columnWidths, 1); + Table table = new Table(UnitValue.createPercentArray(columnWidths)) + .useAllAvailableWidth(); + + // 渲染表头 + for (String header : headers) { + Cell cell = new Cell() + .add(new Paragraph(header) + .setFont(font) + .setFontSize(9) + .setTextAlignment(TextAlignment.CENTER)); + table.addCell(cell); + } + + // 渲染数据(空值兜底 + 字体9号) + for (SysLog sysLog : dataList) { + table.addCell(new Cell().add(new Paragraph(sysLog.getUsername()).setFont(font))); + table.addCell(new Cell().add(new Paragraph(sysLog.getRequest_ip()).setFont(font))); + table.addCell(new Cell().add(new Paragraph(sysLog.getAddress()).setFont(font))); + table.addCell(new Cell().add(new Paragraph(sysLog.getDescription()).setFont(font))); + table.addCell(new Cell().add(new Paragraph(sysLog.getBrowser()).setFont(font))); + table.addCell(new Cell().add(new Paragraph(sysLog.getTime() +"ms").setFont(font))); + table.addCell(new Cell().add(new Paragraph(sysLog.getCreate_time()).setFont(font))); + // 错误信息 + table.addCell(new Cell().add(new Paragraph(extractExceptionMsg(sysLog.getException_detail())).setFont(font))); + } + + document.add(table); + document.close(); } /** @@ -175,4 +271,51 @@ public class SysLogServiceImpl extends ServiceImpl impleme return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList); } + /** + * 错误信息过滤 + * @param exceptionDetail 报错字节数字 + * @return 具体报错信息 + */ + public static String extractExceptionMsg(Object exceptionDetail) { + if (exceptionDetail == null) { + return "-"; + } + String exceptionStr = ""; + try { + if (exceptionDetail instanceof String) { + String rawStr = (String) exceptionDetail; + try { + // Base64解码 + byte[] decodeBytes = Base64.getDecoder().decode(rawStr); + exceptionStr = new String(decodeBytes, StandardCharsets.UTF_8); + } catch (Exception e) { + // 不是合法base64,直接使用原字符串 + exceptionStr = rawStr; + } + } else if (exceptionDetail instanceof byte[]) { + byte[] bytes = (byte[]) exceptionDetail; + exceptionStr = new String(bytes, StandardCharsets.UTF_8); + } else { + // 不支持的类型直接返回- + return "-"; + } + + // 优先匹配 BadRequestException + Matcher badMatcher = BAD_REQUEST_EX_PATTERN.matcher(exceptionStr); + if (badMatcher.find() && badMatcher.group(1) != null) { + return badMatcher.group(1).trim(); + } + + // 通用Exception匹配兜底 + Matcher generalMatcher = GENERAL_EX_PATTERN.matcher(exceptionStr); + if (generalMatcher.find() && generalMatcher.group(1) != null) { + return generalMatcher.group(1).trim(); + } + return "-"; + } catch (Exception e) { + // 任何解析异常全部兜底返回"-" + return "-"; + } + } + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/ReviewSignController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/ReviewSignController.java index 0d26312..4e82166 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/ReviewSignController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/ReviewSignController.java @@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.Map; @@ -40,4 +42,10 @@ public class ReviewSignController { public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { return new ResponseEntity<>(TableDataInfo.build(iMdPdReviewsignService.queryAll(whereJson, page)), HttpStatus.OK); } + + @Log("导出数据") + @GetMapping(value = "/download") + public void download(@RequestParam Map map, HttpServletResponse response) throws IOException { + iMdPdReviewsignService.download(map, response); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdReviewsignService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdReviewsignService.java index 33e4d7c..39db9e7 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdReviewsignService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdReviewsignService.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; import org.nl.wms.basedata_manage.service.dao.MdPdReviewsign; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.Map; /** @@ -32,4 +34,7 @@ public interface IMdPdReviewsignService extends IService { * @param dto 实体类 */ void insert(MdPdReviewsign dto); + + void download(Map map, HttpServletResponse response) throws IOException; + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdReviewsignMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdReviewsignMapper.java index fb24e00..1ac3bbc 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdReviewsignMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdReviewsignMapper.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.nl.wms.basedata_manage.service.dao.MdPdReviewsign; +import java.util.List; import java.util.Map; /** @@ -27,4 +28,12 @@ public interface MdPdReviewsignMapper extends BaseMapper { * @return IPage */ IPage queryAllByPage(Page page, @Param("param") Map whereJson); + + /** + * 导出查询 + * + * @param whereJson 查询条件 + * @return List + */ + List downloadQuery( @Param("param") Map whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdReviewsignMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdReviewsignMapper.xml index f15584e..9a999df 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdReviewsignMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdReviewsignMapper.xml @@ -43,4 +43,45 @@ ORDER BY review.create_time Desc + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdReviewsignServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdReviewsignServiceImpl.java index 42bd3f0..9ee4a32 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdReviewsignServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdReviewsignServiceImpl.java @@ -1,19 +1,37 @@ package org.nl.wms.basedata_manage.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.itextpdf.kernel.font.PdfFont; +import com.itextpdf.kernel.font.PdfFontFactory; +import com.itextpdf.kernel.geom.PageSize; +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.layout.Document; +import com.itextpdf.layout.element.Cell; +import com.itextpdf.layout.element.Paragraph; +import com.itextpdf.layout.element.Table; +import com.itextpdf.layout.properties.TextAlignment; +import com.itextpdf.layout.properties.UnitValue; import org.nl.common.domain.query.PageQuery; import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.logging.dao.SysLog; import org.nl.wms.basedata_manage.service.IMdPdReviewsignService; import org.nl.wms.basedata_manage.service.dao.MdPdReviewsign; import org.nl.wms.basedata_manage.service.dao.mapper.MdPdReviewsignMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; import java.util.Map; /** @@ -43,4 +61,93 @@ public class MdPdReviewsignServiceImpl extends ServiceImpl map, HttpServletResponse response) throws IOException { + // 导出PDF + // 查询数据 + List dataList = this.baseMapper.downloadQuery(map); + + // 设置响应头【前端文件下载】 + response.reset(); + response.setContentType("application/pdf"); + String fileName = "复核记录.pdf"; + fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.setHeader("Cache-Control", "no-cache"); + + // 构建PDF,设置【A4横向】核心改动 + PdfWriter writer = new PdfWriter(response.getOutputStream()); + PdfDocument pdfDoc = new PdfDocument(writer); + // A4横向旋转 + pdfDoc.setDefaultPageSize(PageSize.A4.rotate()); + Document document = new Document(pdfDoc); + + // 中文字体 + PdfFont font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED); + + // 标题 + Paragraph title = new Paragraph("复核记录列表") + .setFont(font) + .setFontSize(14) + .setTextAlignment(TextAlignment.CENTER); + document.add(title); + document.add(new Paragraph("\n")); + + // 表头 + String[] headers = {"袋码/桶号", "物料编码", "物料名称", "批次号", "重量", "质量代码", "载具编码","操作人编码", + "操作人名称","操作时间","复核人编码","复核人名称","复核时间","动作" + }; + // 等分列宽,不再使用固定宽度 + float[] columnWidths = new float[headers.length]; + Arrays.fill(columnWidths, 1); + Table table = new Table(UnitValue.createPercentArray(columnWidths)) + .useAllAvailableWidth(); + + // 渲染表头 + for (String header : headers) { + Cell cell = new Cell() + .add(new Paragraph(header) + .setFont(font) + .setFontSize(9) + .setTextAlignment(TextAlignment.CENTER)); + table.addCell(cell); + } + + // 渲染数据(空值兜底 + 字体9号) + for (JSONObject json : dataList) { + // 袋码 + table.addCell(new Cell().add(new Paragraph(json.getString("bag_code")).setFont(font))); + // 物料编码 + table.addCell(new Cell().add(new Paragraph(json.getString("material_code")).setFont(font))); + // 物料名称 + table.addCell(new Cell().add(new Paragraph(json.getString("material_name")).setFont(font))); + // 批次号 + table.addCell(new Cell().add(new Paragraph(json.getString("pcsn")).setFont(font))); + // 重量(保留三位小数) + table.addCell(new Cell().add(new Paragraph(NumberUtil.round(json.getDouble("qty"),3).toString()).setFont(font))); + // 质量代码 + table.addCell(new Cell().add(new Paragraph(json.getString("quality_code")).setFont(font))); + // 载具编码 + String vehicleCode = json.getString("vehicle_code"); + table.addCell(new Cell().add(new Paragraph(ObjectUtil.isNotEmpty(vehicleCode) ? vehicleCode : "-").setFont(font))); + // 操作人编码 + table.addCell(new Cell().add(new Paragraph(json.getString("create_code")).setFont(font))); + // 操作人名称 + table.addCell(new Cell().add(new Paragraph(json.getString("create_name")).setFont(font))); + // 操作时间 + table.addCell(new Cell().add(new Paragraph(json.getString("create_time")).setFont(font))); + // 复核人编码 + table.addCell(new Cell().add(new Paragraph(json.getString("review_code")).setFont(font))); + // 复核人名称 + table.addCell(new Cell().add(new Paragraph(json.getString("review_name")).setFont(font))); + // 复核时间 + table.addCell(new Cell().add(new Paragraph(json.getString("create_time")).setFont(font))); + // 动作 + table.addCell(new Cell().add(new Paragraph(json.getString("action")).setFont(font))); + } + document.add(table); + document.close(); + + } + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmptyDiskConveyTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmptyDiskConveyTask.java index a514321..4d5900e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmptyDiskConveyTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmptyDiskConveyTask.java @@ -53,7 +53,7 @@ public class EmptyDiskConveyTask extends AbstractTask { } SchBaseTask task = new SchBaseTask(); task.setTask_id(IdUtil.getStringId()); - task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setTask_code(IdUtil.getStringId()); task.setTask_status(TaskStatus.CREATE.getCode()); task.setConfig_code(EmptyDiskConveyTask.class.getSimpleName()); task.setPoint_code1(json.getString("point_code1")); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PalletizingDownTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PalletizingDownTask.java index 3d9c987..9e08ab4 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PalletizingDownTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PalletizingDownTask.java @@ -72,7 +72,7 @@ public class PalletizingDownTask extends AbstractTask { SchBasePoint point = list.get(0); SchBaseTask task = new SchBaseTask(); task.setTask_id(IdUtil.getStringId()); - task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setTask_code(IdUtil.getStringId()); task.setTask_status(TaskStatus.CREATE.getCode()); task.setConfig_code(PalletizingDownTask.class.getSimpleName()); task.setPoint_code1(json.getString("device_code")); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java index ee0e796..094df38 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java @@ -190,65 +190,20 @@ public class TabletingInTask extends AbstractTask { } else if (czjt02) { czws = CZJT02; } + // 校验 + checkAttr(czws,attrEmpList.get(0)); } else { // 判断对应的称重位是否启用 pointList.stream() .filter(row -> row.getPoint_code().equals(attr.getExt_id())) .findFirst().orElseThrow(()-> new BadRequestException("需从称重位【"+attr.getExt_id()+"】进行入库,但有任务正在执行,请等待任务取货完成后下发!")); czws = attr.getExt_id(); + checkAttr(czws,attr); } if (ObjectUtil.isEmpty(czws)) { throw new BadRequestException("称重位不存在或未启用!"); } - /*JSONObject jsonObject = bucket.get(0); - json.put("pcsn", jsonObject.getString("pcsn")); - json.put("material_id", jsonObject.getString("material_id")); - List czws = new ArrayList<>(); - // 查询中间站是否有相同物料、批次仓位 - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("material_id", jsonObject.getString("material_id")); - jsonObject1.put("pcsn", jsonObject.getString("pcsn")); - // 调用分配规则 - MiddleRuleHandler bean = SpringContextHolder.getBean(MiddleRuleHandler.class); - Structattr attr = bean.isLikeMaterial(jsonObject1); - if (ObjectUtil.isEmpty(attr)) { - // 判断 - boolean czjt01 = attrList.stream() - .anyMatch(row -> row.getExt_id().equals("CZJT01")); - boolean czjt02 = attrList.stream() - .anyMatch(row -> row.getExt_id().equals("CZJT02")); - if (czjt01 && czjt02) { - // 找一个没任务的称重位 - czws = pointService.getCanUsePointByRegion("ZJZ01"); - // 判断称重位到中间站的任务是否已经取货完成 - if (ObjectUtil.isNotEmpty(czws)) { - for (SchBasePoint point : czws) { - List list = schBasePointMapper.getCanUsePointByCode(point.getPoint_code()); - if (ObjectUtil.isNotEmpty(list)) { - czws = list; - break; - } else { - czws = new ArrayList<>(); - } - } - } - } else if (czjt01) { - czws = schBasePointMapper.getCanUsePointByCode("CZJT01"); - } else if (czjt02) { - czws = schBasePointMapper.getCanUsePointByCode("CZJT02"); - } - } else { - czws = schBasePointMapper.getCanUsePointByCode(attr.getExt_id()); - if (czws.size() == 0) { - throw new BadRequestException("需从称重位【"+attr.getExt_id()+"】进行入库,但有任务正在执行,请等待任务取货完成后下发!"); - } - } - - if (czws.size() == 0) { - throw new BadRequestException("找不到中间站的称重位或正在进行任务!"); - }*/ -// SchBasePoint point = czws.get(0); SchBaseTask task = new SchBaseTask(); task.setTask_id(IdUtil.getStringId()); task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); @@ -421,4 +376,31 @@ public class TabletingInTask extends AbstractTask { public void taskConfirm(String task_code) { } + + private void checkAttr(String czws, Structattr attrEmpList ) { + // 校验排队中的任务和空仓位是否够用,防止创建超出仓位容量的任务 + long emptyCount = iStructattrService.count( + new QueryWrapper().lambda() + .eq(Structattr::getSect_id, IOSEnum.SECT_ID.code("中间站库区")) + .eq(Structattr::getIs_delete, IOSConstant.ZERO) + .eq(Structattr::getIs_used, IOSConstant.ONE) + .eq(Structattr::getLock_type, IOSConstant.ZERO) + .eq(Structattr::getExt_id, czws) + .eq(Structattr::getBlock_num, attrEmpList.getBlock_num()) + .and(row -> row.isNull(Structattr::getStoragevehicle_code) + .or().eq(Structattr::getStoragevehicle_code, "")) + ); + long pendingCount = taskService.count( + new QueryWrapper().lambda() + .eq(SchBaseTask::getConfig_code, TabletingInTask.class.getSimpleName()) + .in(SchBaseTask::getTask_status, + TaskStatus.CREATE.getCode(), + TaskStatus.EXECUTING.getCode(), + TaskStatus.ISSUED.getCode() + ) + ); + if (emptyCount <= pendingCount) { + throw new BadRequestException("中间站仓位不足,当前组:"+attrEmpList.getBlock_num()+",空位为:" + emptyCount + ",当前排队任务:" + pendingCount + "条,请等待任务完成后再创建!"); + } + } } diff --git a/wms/nladmin-ui/src/views/monitor/log/errorLog.vue b/wms/nladmin-ui/src/views/monitor/log/errorLog.vue index 23727e1..a4093bc 100644 --- a/wms/nladmin-ui/src/views/monitor/log/errorLog.vue +++ b/wms/nladmin-ui/src/views/monitor/log/errorLog.vue @@ -12,7 +12,7 @@ :loading="showDtlLoading" @click="down" > - 导出 + 导出PDF @@ -177,7 +177,7 @@ export default { data.log_type = 'ERROR' this.showDtlLoading = true download('/api/logs/download', data).then(result => { - downloadFile(result, '日志查询', 'xlsx') + downloadFile(result, '异常日志查询', 'pdf') this.showDtlLoading = false }).catch(() => { this.showDtlLoading = false diff --git a/wms/nladmin-ui/src/views/wms/statement/review/index.vue b/wms/nladmin-ui/src/views/wms/statement/review/index.vue index 9951c9b..1cb074f 100644 --- a/wms/nladmin-ui/src/views/wms/statement/review/index.vue +++ b/wms/nladmin-ui/src/views/wms/statement/review/index.vue @@ -56,7 +56,19 @@ - + + + 导出PDF + + - + + @@ -162,9 +175,14 @@ export default { }, downdtl() { if (this.currentRow !== null) { + const data = this.crud.query + if (this.crud.query.createTime !== undefined) { + data.begin_time = this.crud.query.createTime[0] + data.end_time = this.crud.query.createTime[1] + } this.showDtlLoading = true - download('/api/review/download', this.crud.query).then(result => { - downloadFile(result, '复核记录', 'xlsx') + download('/api/review/download', data).then(result => { + downloadFile(result, '复核记录', 'pdf') this.showDtlLoading = false }).catch(() => { this.showDtlLoading = false